@coreui/react 5.0.0-rc.0 → 5.0.0-rc.2

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 (368) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +2 -2
  3. package/dist/cjs/components/alert/CAlertHeading.d.ts +7 -6
  4. package/dist/cjs/components/alert/CAlertHeading.js +2 -2
  5. package/dist/cjs/components/alert/CAlertHeading.js.map +1 -1
  6. package/dist/cjs/components/badge/CBadge.d.ts +7 -6
  7. package/dist/cjs/components/badge/CBadge.js +3 -3
  8. package/dist/cjs/components/badge/CBadge.js.map +1 -1
  9. package/dist/cjs/components/button/CButton.d.ts +7 -6
  10. package/dist/cjs/components/button/CButton.js +3 -3
  11. package/dist/cjs/components/button/CButton.js.map +1 -1
  12. package/dist/cjs/components/card/CCardHeader.d.ts +7 -6
  13. package/dist/cjs/components/card/CCardHeader.js +2 -2
  14. package/dist/cjs/components/card/CCardHeader.js.map +1 -1
  15. package/dist/cjs/components/card/CCardImage.d.ts +7 -6
  16. package/dist/cjs/components/card/CCardImage.js +2 -2
  17. package/dist/cjs/components/card/CCardImage.js.map +1 -1
  18. package/dist/cjs/components/card/CCardSubtitle.d.ts +7 -6
  19. package/dist/cjs/components/card/CCardSubtitle.js +2 -2
  20. package/dist/cjs/components/card/CCardSubtitle.js.map +1 -1
  21. package/dist/cjs/components/card/CCardText.d.ts +7 -6
  22. package/dist/cjs/components/card/CCardText.js +2 -2
  23. package/dist/cjs/components/card/CCardText.js.map +1 -1
  24. package/dist/cjs/components/card/CCardTitle.d.ts +7 -6
  25. package/dist/cjs/components/card/CCardTitle.js +2 -2
  26. package/dist/cjs/components/card/CCardTitle.js.map +1 -1
  27. package/dist/cjs/components/carousel/CCarousel.js.map +1 -1
  28. package/dist/cjs/components/carousel/CCarouselItem.js.map +1 -1
  29. package/dist/cjs/components/collapse/CCollapse.js.map +1 -1
  30. package/dist/cjs/components/conditional-portal/CConditionalPortal.js +1 -1
  31. package/dist/cjs/components/conditional-portal/CConditionalPortal.js.map +1 -1
  32. package/dist/cjs/components/dropdown/CDropdown.d.ts +6 -5
  33. package/dist/cjs/components/dropdown/CDropdown.js +4 -4
  34. package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
  35. package/dist/cjs/components/dropdown/CDropdownHeader.d.ts +7 -6
  36. package/dist/cjs/components/dropdown/CDropdownHeader.js +2 -2
  37. package/dist/cjs/components/dropdown/CDropdownHeader.js.map +1 -1
  38. package/dist/cjs/components/dropdown/CDropdownItem.d.ts +2 -6
  39. package/dist/cjs/components/dropdown/CDropdownItem.js +3 -3
  40. package/dist/cjs/components/dropdown/CDropdownItem.js.map +1 -1
  41. package/dist/cjs/components/dropdown/CDropdownItemPlain.d.ts +7 -6
  42. package/dist/cjs/components/dropdown/CDropdownItemPlain.js +2 -2
  43. package/dist/cjs/components/dropdown/CDropdownItemPlain.js.map +1 -1
  44. package/dist/cjs/components/dropdown/CDropdownMenu.d.ts +7 -6
  45. package/dist/cjs/components/dropdown/CDropdownMenu.js +2 -2
  46. package/dist/cjs/components/dropdown/CDropdownMenu.js.map +1 -1
  47. package/dist/cjs/components/dropdown/CDropdownToggle.d.ts +1 -1
  48. package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
  49. package/dist/cjs/components/dropdown/utils.js.map +1 -1
  50. package/dist/cjs/components/form/CFormCheck.js.map +1 -1
  51. package/dist/cjs/components/form/CFormFeedback.d.ts +7 -6
  52. package/dist/cjs/components/form/CFormFeedback.js +2 -2
  53. package/dist/cjs/components/form/CFormFeedback.js.map +1 -1
  54. package/dist/cjs/components/form/CFormText.d.ts +7 -6
  55. package/dist/cjs/components/form/CFormText.js +2 -2
  56. package/dist/cjs/components/form/CFormText.js.map +1 -1
  57. package/dist/cjs/components/form/CInputGroupText.d.ts +7 -6
  58. package/dist/cjs/components/form/CInputGroupText.js +2 -2
  59. package/dist/cjs/components/form/CInputGroupText.js.map +1 -1
  60. package/dist/cjs/components/grid/CCol.js.map +1 -1
  61. package/dist/cjs/components/grid/CRow.js.map +1 -1
  62. package/dist/cjs/components/header/CHeaderBrand.d.ts +7 -6
  63. package/dist/cjs/components/header/CHeaderBrand.js +2 -2
  64. package/dist/cjs/components/header/CHeaderBrand.js.map +1 -1
  65. package/dist/cjs/components/header/CHeaderNav.d.ts +7 -6
  66. package/dist/cjs/components/header/CHeaderNav.js +2 -2
  67. package/dist/cjs/components/header/CHeaderNav.js.map +1 -1
  68. package/dist/cjs/components/link/CLink.d.ts +8 -7
  69. package/dist/cjs/components/link/CLink.js +2 -2
  70. package/dist/cjs/components/link/CLink.js.map +1 -1
  71. package/dist/cjs/components/list-group/CListGroup.d.ts +7 -6
  72. package/dist/cjs/components/list-group/CListGroup.js +2 -2
  73. package/dist/cjs/components/list-group/CListGroup.js.map +1 -1
  74. package/dist/cjs/components/list-group/CListGroupItem.d.ts +7 -6
  75. package/dist/cjs/components/list-group/CListGroupItem.js +6 -6
  76. package/dist/cjs/components/list-group/CListGroupItem.js.map +1 -1
  77. package/dist/cjs/components/modal/CModal.js +1 -2
  78. package/dist/cjs/components/modal/CModal.js.map +1 -1
  79. package/dist/cjs/components/modal/CModalTitle.d.ts +4 -3
  80. package/dist/cjs/components/modal/CModalTitle.js +2 -2
  81. package/dist/cjs/components/modal/CModalTitle.js.map +1 -1
  82. package/dist/cjs/components/nav/CNav.d.ts +7 -6
  83. package/dist/cjs/components/nav/CNav.js +2 -2
  84. package/dist/cjs/components/nav/CNav.js.map +1 -1
  85. package/dist/cjs/components/nav/CNavGroup.d.ts +10 -4
  86. package/dist/cjs/components/nav/CNavGroup.js +11 -16
  87. package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
  88. package/dist/cjs/components/nav/CNavGroupItems.d.ts +10 -3
  89. package/dist/cjs/components/nav/CNavGroupItems.js +3 -2
  90. package/dist/cjs/components/nav/CNavGroupItems.js.map +1 -1
  91. package/dist/cjs/components/nav/CNavItem.d.ts +11 -2
  92. package/dist/cjs/components/nav/CNavItem.js +3 -2
  93. package/dist/cjs/components/nav/CNavItem.js.map +1 -1
  94. package/dist/cjs/components/nav/CNavLink.d.ts +2 -18
  95. package/dist/cjs/components/nav/CNavLink.js +3 -0
  96. package/dist/cjs/components/nav/CNavLink.js.map +1 -1
  97. package/dist/cjs/components/nav/CNavTitle.d.ts +7 -2
  98. package/dist/cjs/components/nav/CNavTitle.js +3 -2
  99. package/dist/cjs/components/nav/CNavTitle.js.map +1 -1
  100. package/dist/cjs/components/navbar/CNavbar.d.ts +7 -6
  101. package/dist/cjs/components/navbar/CNavbar.js +2 -2
  102. package/dist/cjs/components/navbar/CNavbar.js.map +1 -1
  103. package/dist/cjs/components/navbar/CNavbarBrand.d.ts +8 -7
  104. package/dist/cjs/components/navbar/CNavbarBrand.js +3 -3
  105. package/dist/cjs/components/navbar/CNavbarBrand.js.map +1 -1
  106. package/dist/cjs/components/navbar/CNavbarNav.d.ts +7 -6
  107. package/dist/cjs/components/navbar/CNavbarNav.js +3 -3
  108. package/dist/cjs/components/navbar/CNavbarNav.js.map +1 -1
  109. package/dist/cjs/components/offcanvas/COffcanvas.js.map +1 -1
  110. package/dist/cjs/components/offcanvas/COffcanvasTitle.d.ts +7 -6
  111. package/dist/cjs/components/offcanvas/COffcanvasTitle.js +2 -2
  112. package/dist/cjs/components/offcanvas/COffcanvasTitle.js.map +1 -1
  113. package/dist/cjs/components/pagination/CPaginationItem.d.ts +4 -3
  114. package/dist/cjs/components/pagination/CPaginationItem.js +4 -4
  115. package/dist/cjs/components/pagination/CPaginationItem.js.map +1 -1
  116. package/dist/cjs/components/placeholder/CPlaceholder.d.ts +7 -6
  117. package/dist/cjs/components/placeholder/CPlaceholder.js +2 -2
  118. package/dist/cjs/components/placeholder/CPlaceholder.js.map +1 -1
  119. package/dist/cjs/components/popover/CPopover.js +20 -13
  120. package/dist/cjs/components/popover/CPopover.js.map +1 -1
  121. package/dist/cjs/components/progress/CProgress.js.map +1 -1
  122. package/dist/cjs/components/sidebar/CSidebar.js.map +1 -1
  123. package/dist/cjs/components/sidebar/CSidebarBrand.d.ts +10 -3
  124. package/dist/cjs/components/sidebar/CSidebarBrand.js +3 -2
  125. package/dist/cjs/components/sidebar/CSidebarBrand.js.map +1 -1
  126. package/dist/cjs/components/sidebar/CSidebarNav.d.ts +9 -2
  127. package/dist/cjs/components/sidebar/CSidebarNav.js +30 -12
  128. package/dist/cjs/components/sidebar/CSidebarNav.js.map +1 -1
  129. package/dist/cjs/components/spinner/CSpinner.d.ts +7 -6
  130. package/dist/cjs/components/spinner/CSpinner.js +2 -2
  131. package/dist/cjs/components/spinner/CSpinner.js.map +1 -1
  132. package/dist/cjs/components/toast/CToast.js.map +1 -1
  133. package/dist/cjs/components/toast/CToastClose.d.ts +5 -4
  134. package/dist/cjs/components/toast/CToastClose.js +2 -2
  135. package/dist/cjs/components/toast/CToastClose.js.map +1 -1
  136. package/dist/cjs/components/tooltip/CTooltip.js +20 -13
  137. package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
  138. package/dist/cjs/helpers/index.d.ts +2 -0
  139. package/dist/cjs/helpers/polymorphicComponent.d.ts +14 -0
  140. package/dist/cjs/hooks/useColorModes.js.map +1 -1
  141. package/dist/cjs/hooks/useForkedRef.js.map +1 -1
  142. package/dist/cjs/hooks/usePopper.js.map +1 -1
  143. package/dist/cjs/utils/executeAfterTransition.js.map +1 -1
  144. package/dist/cjs/utils/getRTLPlacement.js.map +1 -1
  145. package/dist/cjs/utils/getTransitionDurationFromElement.js.map +1 -1
  146. package/dist/cjs/utils/isRTL.js.map +1 -1
  147. package/dist/esm/components/alert/CAlertHeading.d.ts +7 -6
  148. package/dist/esm/components/alert/CAlertHeading.js +2 -2
  149. package/dist/esm/components/alert/CAlertHeading.js.map +1 -1
  150. package/dist/esm/components/badge/CBadge.d.ts +7 -6
  151. package/dist/esm/components/badge/CBadge.js +3 -3
  152. package/dist/esm/components/badge/CBadge.js.map +1 -1
  153. package/dist/esm/components/button/CButton.d.ts +7 -6
  154. package/dist/esm/components/button/CButton.js +3 -3
  155. package/dist/esm/components/button/CButton.js.map +1 -1
  156. package/dist/esm/components/card/CCardHeader.d.ts +7 -6
  157. package/dist/esm/components/card/CCardHeader.js +2 -2
  158. package/dist/esm/components/card/CCardHeader.js.map +1 -1
  159. package/dist/esm/components/card/CCardImage.d.ts +7 -6
  160. package/dist/esm/components/card/CCardImage.js +2 -2
  161. package/dist/esm/components/card/CCardImage.js.map +1 -1
  162. package/dist/esm/components/card/CCardSubtitle.d.ts +7 -6
  163. package/dist/esm/components/card/CCardSubtitle.js +2 -2
  164. package/dist/esm/components/card/CCardSubtitle.js.map +1 -1
  165. package/dist/esm/components/card/CCardText.d.ts +7 -6
  166. package/dist/esm/components/card/CCardText.js +2 -2
  167. package/dist/esm/components/card/CCardText.js.map +1 -1
  168. package/dist/esm/components/card/CCardTitle.d.ts +7 -6
  169. package/dist/esm/components/card/CCardTitle.js +2 -2
  170. package/dist/esm/components/card/CCardTitle.js.map +1 -1
  171. package/dist/esm/components/carousel/CCarousel.js.map +1 -1
  172. package/dist/esm/components/carousel/CCarouselItem.js.map +1 -1
  173. package/dist/esm/components/collapse/CCollapse.js.map +1 -1
  174. package/dist/esm/components/conditional-portal/CConditionalPortal.js +1 -1
  175. package/dist/esm/components/conditional-portal/CConditionalPortal.js.map +1 -1
  176. package/dist/esm/components/dropdown/CDropdown.d.ts +6 -5
  177. package/dist/esm/components/dropdown/CDropdown.js +4 -4
  178. package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
  179. package/dist/esm/components/dropdown/CDropdownHeader.d.ts +7 -6
  180. package/dist/esm/components/dropdown/CDropdownHeader.js +2 -2
  181. package/dist/esm/components/dropdown/CDropdownHeader.js.map +1 -1
  182. package/dist/esm/components/dropdown/CDropdownItem.d.ts +2 -6
  183. package/dist/esm/components/dropdown/CDropdownItem.js +3 -3
  184. package/dist/esm/components/dropdown/CDropdownItem.js.map +1 -1
  185. package/dist/esm/components/dropdown/CDropdownItemPlain.d.ts +7 -6
  186. package/dist/esm/components/dropdown/CDropdownItemPlain.js +2 -2
  187. package/dist/esm/components/dropdown/CDropdownItemPlain.js.map +1 -1
  188. package/dist/esm/components/dropdown/CDropdownMenu.d.ts +7 -6
  189. package/dist/esm/components/dropdown/CDropdownMenu.js +2 -2
  190. package/dist/esm/components/dropdown/CDropdownMenu.js.map +1 -1
  191. package/dist/esm/components/dropdown/CDropdownToggle.d.ts +1 -1
  192. package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
  193. package/dist/esm/components/dropdown/utils.js.map +1 -1
  194. package/dist/esm/components/form/CFormCheck.js.map +1 -1
  195. package/dist/esm/components/form/CFormFeedback.d.ts +7 -6
  196. package/dist/esm/components/form/CFormFeedback.js +2 -2
  197. package/dist/esm/components/form/CFormFeedback.js.map +1 -1
  198. package/dist/esm/components/form/CFormText.d.ts +7 -6
  199. package/dist/esm/components/form/CFormText.js +2 -2
  200. package/dist/esm/components/form/CFormText.js.map +1 -1
  201. package/dist/esm/components/form/CInputGroupText.d.ts +7 -6
  202. package/dist/esm/components/form/CInputGroupText.js +2 -2
  203. package/dist/esm/components/form/CInputGroupText.js.map +1 -1
  204. package/dist/esm/components/grid/CCol.js.map +1 -1
  205. package/dist/esm/components/grid/CRow.js.map +1 -1
  206. package/dist/esm/components/header/CHeaderBrand.d.ts +7 -6
  207. package/dist/esm/components/header/CHeaderBrand.js +2 -2
  208. package/dist/esm/components/header/CHeaderBrand.js.map +1 -1
  209. package/dist/esm/components/header/CHeaderNav.d.ts +7 -6
  210. package/dist/esm/components/header/CHeaderNav.js +2 -2
  211. package/dist/esm/components/header/CHeaderNav.js.map +1 -1
  212. package/dist/esm/components/link/CLink.d.ts +8 -7
  213. package/dist/esm/components/link/CLink.js +2 -2
  214. package/dist/esm/components/link/CLink.js.map +1 -1
  215. package/dist/esm/components/list-group/CListGroup.d.ts +7 -6
  216. package/dist/esm/components/list-group/CListGroup.js +2 -2
  217. package/dist/esm/components/list-group/CListGroup.js.map +1 -1
  218. package/dist/esm/components/list-group/CListGroupItem.d.ts +7 -6
  219. package/dist/esm/components/list-group/CListGroupItem.js +6 -6
  220. package/dist/esm/components/list-group/CListGroupItem.js.map +1 -1
  221. package/dist/esm/components/modal/CModal.js +1 -2
  222. package/dist/esm/components/modal/CModal.js.map +1 -1
  223. package/dist/esm/components/modal/CModalTitle.d.ts +4 -3
  224. package/dist/esm/components/modal/CModalTitle.js +2 -2
  225. package/dist/esm/components/modal/CModalTitle.js.map +1 -1
  226. package/dist/esm/components/nav/CNav.d.ts +7 -6
  227. package/dist/esm/components/nav/CNav.js +2 -2
  228. package/dist/esm/components/nav/CNav.js.map +1 -1
  229. package/dist/esm/components/nav/CNavGroup.d.ts +10 -4
  230. package/dist/esm/components/nav/CNavGroup.js +11 -16
  231. package/dist/esm/components/nav/CNavGroup.js.map +1 -1
  232. package/dist/esm/components/nav/CNavGroupItems.d.ts +10 -3
  233. package/dist/esm/components/nav/CNavGroupItems.js +3 -2
  234. package/dist/esm/components/nav/CNavGroupItems.js.map +1 -1
  235. package/dist/esm/components/nav/CNavItem.d.ts +11 -2
  236. package/dist/esm/components/nav/CNavItem.js +3 -2
  237. package/dist/esm/components/nav/CNavItem.js.map +1 -1
  238. package/dist/esm/components/nav/CNavLink.d.ts +2 -18
  239. package/dist/esm/components/nav/CNavLink.js +3 -0
  240. package/dist/esm/components/nav/CNavLink.js.map +1 -1
  241. package/dist/esm/components/nav/CNavTitle.d.ts +7 -2
  242. package/dist/esm/components/nav/CNavTitle.js +3 -2
  243. package/dist/esm/components/nav/CNavTitle.js.map +1 -1
  244. package/dist/esm/components/navbar/CNavbar.d.ts +7 -6
  245. package/dist/esm/components/navbar/CNavbar.js +2 -2
  246. package/dist/esm/components/navbar/CNavbar.js.map +1 -1
  247. package/dist/esm/components/navbar/CNavbarBrand.d.ts +8 -7
  248. package/dist/esm/components/navbar/CNavbarBrand.js +3 -3
  249. package/dist/esm/components/navbar/CNavbarBrand.js.map +1 -1
  250. package/dist/esm/components/navbar/CNavbarNav.d.ts +7 -6
  251. package/dist/esm/components/navbar/CNavbarNav.js +3 -3
  252. package/dist/esm/components/navbar/CNavbarNav.js.map +1 -1
  253. package/dist/esm/components/offcanvas/COffcanvas.js.map +1 -1
  254. package/dist/esm/components/offcanvas/COffcanvasTitle.d.ts +7 -6
  255. package/dist/esm/components/offcanvas/COffcanvasTitle.js +2 -2
  256. package/dist/esm/components/offcanvas/COffcanvasTitle.js.map +1 -1
  257. package/dist/esm/components/pagination/CPaginationItem.d.ts +4 -3
  258. package/dist/esm/components/pagination/CPaginationItem.js +4 -4
  259. package/dist/esm/components/pagination/CPaginationItem.js.map +1 -1
  260. package/dist/esm/components/placeholder/CPlaceholder.d.ts +7 -6
  261. package/dist/esm/components/placeholder/CPlaceholder.js +2 -2
  262. package/dist/esm/components/placeholder/CPlaceholder.js.map +1 -1
  263. package/dist/esm/components/popover/CPopover.js +20 -13
  264. package/dist/esm/components/popover/CPopover.js.map +1 -1
  265. package/dist/esm/components/progress/CProgress.js.map +1 -1
  266. package/dist/esm/components/sidebar/CSidebar.js.map +1 -1
  267. package/dist/esm/components/sidebar/CSidebarBrand.d.ts +10 -3
  268. package/dist/esm/components/sidebar/CSidebarBrand.js +3 -2
  269. package/dist/esm/components/sidebar/CSidebarBrand.js.map +1 -1
  270. package/dist/esm/components/sidebar/CSidebarNav.d.ts +9 -2
  271. package/dist/esm/components/sidebar/CSidebarNav.js +30 -12
  272. package/dist/esm/components/sidebar/CSidebarNav.js.map +1 -1
  273. package/dist/esm/components/spinner/CSpinner.d.ts +7 -6
  274. package/dist/esm/components/spinner/CSpinner.js +2 -2
  275. package/dist/esm/components/spinner/CSpinner.js.map +1 -1
  276. package/dist/esm/components/toast/CToast.js.map +1 -1
  277. package/dist/esm/components/toast/CToastClose.d.ts +5 -4
  278. package/dist/esm/components/toast/CToastClose.js +2 -2
  279. package/dist/esm/components/toast/CToastClose.js.map +1 -1
  280. package/dist/esm/components/tooltip/CTooltip.js +20 -13
  281. package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
  282. package/dist/esm/helpers/index.d.ts +2 -0
  283. package/dist/esm/helpers/polymorphicComponent.d.ts +14 -0
  284. package/dist/esm/hooks/useColorModes.js.map +1 -1
  285. package/dist/esm/hooks/useForkedRef.js.map +1 -1
  286. package/dist/esm/hooks/usePopper.js.map +1 -1
  287. package/dist/esm/utils/executeAfterTransition.js.map +1 -1
  288. package/dist/esm/utils/getRTLPlacement.js.map +1 -1
  289. package/dist/esm/utils/getTransitionDurationFromElement.js.map +1 -1
  290. package/dist/esm/utils/isRTL.js.map +1 -1
  291. package/package.json +13 -13
  292. package/src/components/alert/CAlertHeading.tsx +17 -14
  293. package/src/components/alert/__tests__/CAlertHeading.spec.tsx +1 -1
  294. package/src/components/badge/CBadge.tsx +12 -8
  295. package/src/components/badge/__tests__/CBadge.spec.tsx +1 -1
  296. package/src/components/button/CButton.tsx +12 -18
  297. package/src/components/button/__tests__/CButton.spec.tsx +2 -2
  298. package/src/components/card/CCardHeader.tsx +17 -14
  299. package/src/components/card/CCardImage.tsx +9 -7
  300. package/src/components/card/CCardSubtitle.tsx +18 -14
  301. package/src/components/card/CCardText.tsx +17 -14
  302. package/src/components/card/CCardTitle.tsx +17 -14
  303. package/src/components/card/__tests__/CCardGroup.spec.tsx +1 -1
  304. package/src/components/card/__tests__/CCardHeader.spec.tsx +1 -1
  305. package/src/components/card/__tests__/CCardImage.spec.tsx +1 -3
  306. package/src/components/card/__tests__/CCardSubtitle.spec.tsx +1 -1
  307. package/src/components/card/__tests__/CCardText.spec.tsx +1 -1
  308. package/src/components/card/__tests__/CCardTitle.spec.tsx +1 -1
  309. package/src/components/conditional-portal/CConditionalPortal.tsx +1 -1
  310. package/src/components/dropdown/CDropdown.tsx +12 -8
  311. package/src/components/dropdown/CDropdownHeader.tsx +17 -14
  312. package/src/components/dropdown/CDropdownItem.tsx +14 -20
  313. package/src/components/dropdown/CDropdownItemPlain.tsx +12 -7
  314. package/src/components/dropdown/CDropdownMenu.tsx +43 -41
  315. package/src/components/dropdown/CDropdownToggle.tsx +1 -1
  316. package/src/components/dropdown/__tests__/CDropdown.spec.tsx +1 -1
  317. package/src/components/dropdown/__tests__/CDropdownHeader.spec.tsx +1 -1
  318. package/src/components/dropdown/__tests__/CDropdownItem.spec.tsx +1 -1
  319. package/src/components/dropdown/__tests__/CDropdownItemPlain.spec.tsx +1 -1
  320. package/src/components/dropdown/__tests__/CDropdownMenu.spec.tsx +1 -1
  321. package/src/components/dropdown/types.ts +1 -1
  322. package/src/components/form/CFormFeedback.tsx +28 -27
  323. package/src/components/form/CFormText.tsx +17 -14
  324. package/src/components/form/CInputGroupText.tsx +17 -14
  325. package/src/components/form/__tests__/CFormText.spec.tsx +1 -1
  326. package/src/components/form/__tests__/CInputGroupText.spec.tsx +1 -1
  327. package/src/components/header/CHeaderBrand.tsx +17 -14
  328. package/src/components/header/CHeaderNav.tsx +22 -19
  329. package/src/components/header/__tests__/CHeaderBrand.spec.tsx +1 -1
  330. package/src/components/header/__tests__/CHeaderNav.spec.tsx +1 -1
  331. package/src/components/link/CLink.tsx +33 -29
  332. package/src/components/link/__tests__/CLink.spec.tsx +2 -2
  333. package/src/components/list-group/CListGroup.tsx +27 -24
  334. package/src/components/list-group/CListGroupItem.tsx +38 -37
  335. package/src/components/list-group/__tests__/CListGroup.spec.tsx +1 -1
  336. package/src/components/list-group/__tests__/CListGroupItem.spec.tsx +1 -7
  337. package/src/components/modal/CModal.tsx +1 -4
  338. package/src/components/modal/CModalTitle.tsx +14 -11
  339. package/src/components/modal/__tests__/CModalTitle.spec.tsx +1 -1
  340. package/src/components/nav/CNav.tsx +29 -26
  341. package/src/components/nav/CNavGroup.tsx +111 -100
  342. package/src/components/nav/CNavGroupItems.tsx +21 -11
  343. package/src/components/nav/CNavItem.tsx +29 -16
  344. package/src/components/nav/CNavLink.tsx +7 -19
  345. package/src/components/nav/CNavTitle.tsx +18 -10
  346. package/src/components/nav/__tests__/CNav.spec.tsx +1 -1
  347. package/src/components/nav/__tests__/CNavItem.spec.tsx +1 -1
  348. package/src/components/nav/__tests__/CNavLink.spec.tsx +1 -1
  349. package/src/components/navbar/CNavbar.tsx +11 -7
  350. package/src/components/navbar/CNavbarBrand.tsx +19 -16
  351. package/src/components/navbar/CNavbarNav.tsx +22 -19
  352. package/src/components/navbar/__tests__/CNavbar.spec.tsx +1 -1
  353. package/src/components/navbar/__tests__/CNavbarBrand.spec.tsx +1 -1
  354. package/src/components/navbar/__tests__/CNavbarNav.spec.tsx +1 -1
  355. package/src/components/offcanvas/COffcanvasTitle.tsx +17 -14
  356. package/src/components/offcanvas/__tests__/COffcanvasTitle.spec.tsx +1 -1
  357. package/src/components/pagination/CPaginationItem.tsx +33 -30
  358. package/src/components/pagination/__tests__/CPaginationItem.spec.tsx +1 -1
  359. package/src/components/placeholder/CPlaceholder.tsx +40 -41
  360. package/src/components/popover/CPopover.tsx +24 -13
  361. package/src/components/sidebar/CSidebarBrand.tsx +21 -11
  362. package/src/components/sidebar/CSidebarNav.tsx +68 -24
  363. package/src/components/spinner/CSpinner.tsx +11 -7
  364. package/src/components/spinner/__tests__/CSpinner.spec.tsx +1 -1
  365. package/src/components/toast/CToastClose.tsx +8 -7
  366. package/src/components/tooltip/CTooltip.tsx +24 -12
  367. package/src/helpers/index.ts +3 -0
  368. package/src/helpers/polymorphicComponent.ts +21 -0
@@ -200,10 +200,7 @@ export const CModal = forwardRef<HTMLDivElement, CModalProps>(
200
200
  }, [_visible])
201
201
 
202
202
  const handleClickOutside = (event: Event) => {
203
- if (
204
- modalContentRef.current &&
205
- !modalContentRef.current.contains(event.target as HTMLElement)
206
- ) {
203
+ if (modalRef.current && modalRef.current == event.target) {
207
204
  handleDismiss()
208
205
  }
209
206
  }
@@ -2,6 +2,8 @@ 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 CModalTitleProps extends HTMLAttributes<HTMLHeadingElement> {
6
8
  /**
7
9
  * A string of all className you want applied to the base component.
@@ -10,23 +12,24 @@ export interface CModalTitleProps extends HTMLAttributes<HTMLHeadingElement> {
10
12
  /**
11
13
  * Component used for the root node. Either a string to use a HTML element or a component.
12
14
  */
13
- component?: string | ElementType
15
+ as?: ElementType
14
16
  }
15
17
 
16
- export const CModalTitle = forwardRef<HTMLHeadElement, CModalTitleProps>(
17
- ({ children, component: Component = 'h5', className, ...rest }, ref) => {
18
- return (
19
- <Component className={classNames('modal-title', className)} {...rest} ref={ref}>
20
- {children}
21
- </Component>
22
- )
23
- },
24
- )
18
+ export const CModalTitle: PolymorphicRefForwardingComponent<'h5', CModalTitleProps> = forwardRef<
19
+ HTMLHeadElement,
20
+ CModalTitleProps
21
+ >(({ children, as: Component = 'h5', className, ...rest }, ref) => {
22
+ return (
23
+ <Component className={classNames('modal-title', className)} {...rest} ref={ref}>
24
+ {children}
25
+ </Component>
26
+ )
27
+ })
25
28
 
26
29
  CModalTitle.propTypes = {
30
+ as: PropTypes.elementType,
27
31
  children: PropTypes.node,
28
32
  className: PropTypes.string,
29
- component: PropTypes.elementType,
30
33
  }
31
34
 
32
35
  CModalTitle.displayName = 'CModalTitle'
@@ -10,7 +10,7 @@ test('loads and displays CModalTitle component', async () => {
10
10
 
11
11
  test('CModalTitle customize', async () => {
12
12
  const { container } = render(
13
- <CModalTitle className="bazinga" component="h3">
13
+ <CModalTitle className="bazinga" as="h3">
14
14
  Test
15
15
  </CModalTitle>,
16
16
  )
@@ -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.2
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.2
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.2
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
  )