@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
@@ -2,15 +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 CFormFeedbackProps extends HTMLAttributes<HTMLDivElement | HTMLSpanElement> {
6
8
  /**
7
- * A string of all className you want applied to the component.
9
+ * Component used for the root node. Either a string to use a HTML element or a component.
8
10
  */
9
- className?: string
11
+ as?: ElementType
10
12
  /**
11
- * Component used for the root node. Either a string to use a HTML element or a component.
13
+ * A string of all className you want applied to the component.
12
14
  */
13
- component?: string | ElementType
15
+ className?: string
16
+
14
17
  /**
15
18
  * Method called immediately after the `value` prop changes.
16
19
  */
@@ -25,33 +28,31 @@ export interface CFormFeedbackProps extends HTMLAttributes<HTMLDivElement | HTML
25
28
  valid?: boolean
26
29
  }
27
30
 
28
- export const CFormFeedback = forwardRef<HTMLDivElement | HTMLSpanElement, CFormFeedbackProps>(
29
- (
30
- { children, className, component: Component = 'div', invalid, tooltip, valid, ...rest },
31
- ref,
32
- ) => {
33
- return (
34
- <Component
35
- className={classNames(
36
- {
37
- [`invalid-${tooltip ? 'tooltip' : 'feedback'}`]: invalid,
38
- [`valid-${tooltip ? 'tooltip' : 'feedback'}`]: valid,
39
- },
40
- className,
41
- )}
42
- {...rest}
43
- ref={ref}
44
- >
45
- {children}
46
- </Component>
47
- )
48
- },
49
- )
31
+ export const CFormFeedback: PolymorphicRefForwardingComponent<'div', CFormFeedbackProps> =
32
+ forwardRef<HTMLDivElement | HTMLSpanElement, CFormFeedbackProps>(
33
+ ({ children, as: Component = 'div', className, invalid, tooltip, valid, ...rest }, ref) => {
34
+ return (
35
+ <Component
36
+ className={classNames(
37
+ {
38
+ [`invalid-${tooltip ? 'tooltip' : 'feedback'}`]: invalid,
39
+ [`valid-${tooltip ? 'tooltip' : 'feedback'}`]: valid,
40
+ },
41
+ className,
42
+ )}
43
+ {...rest}
44
+ ref={ref}
45
+ >
46
+ {children}
47
+ </Component>
48
+ )
49
+ },
50
+ )
50
51
 
51
52
  CFormFeedback.propTypes = {
53
+ as: PropTypes.elementType,
52
54
  children: PropTypes.node,
53
55
  className: PropTypes.string,
54
- component: PropTypes.elementType,
55
56
  invalid: PropTypes.bool,
56
57
  tooltip: PropTypes.bool,
57
58
  valid: PropTypes.bool,
@@ -2,31 +2,34 @@ 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 CFormTextProps extends HTMLAttributes<HTMLDivElement | HTMLSpanElement> {
6
8
  /**
7
- * A string of all className you want applied to the component.
9
+ * Component used for the root node. Either a string to use a HTML element or a component.
8
10
  */
9
- className?: string
11
+ as?: ElementType
10
12
  /**
11
- * Component used for the root node. Either a string to use a HTML element or a component.
13
+ * A string of all className you want applied to the component.
12
14
  */
13
- component?: string | ElementType
15
+ className?: string
14
16
  }
15
17
 
16
- export const CFormText = forwardRef<HTMLDivElement | HTMLSpanElement, CFormTextProps>(
17
- ({ children, className, component: Component = 'div', ...rest }, ref) => {
18
- return (
19
- <Component className={classNames('form-text', className)} {...rest} ref={ref}>
20
- {children}
21
- </Component>
22
- )
23
- },
24
- )
18
+ export const CFormText: PolymorphicRefForwardingComponent<'div', CFormTextProps> = forwardRef<
19
+ HTMLDivElement | HTMLSpanElement,
20
+ CFormTextProps
21
+ >(({ children, as: Component = 'div', className, ...rest }, ref) => {
22
+ return (
23
+ <Component className={classNames('form-text', className)} {...rest} ref={ref}>
24
+ {children}
25
+ </Component>
26
+ )
27
+ })
25
28
 
26
29
  CFormText.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
  CFormText.displayName = 'CFormText'
@@ -2,32 +2,35 @@ import React, { ElementType, forwardRef, LabelHTMLAttributes } 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 CInputGroupTextProps
6
8
  extends LabelHTMLAttributes<HTMLLabelElement | HTMLSpanElement> {
7
9
  /**
8
- * A string of all className you want applied to the 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 component.
13
15
  */
14
- component?: string | ElementType
16
+ className?: string
15
17
  }
16
18
 
17
- export const CInputGroupText = forwardRef<HTMLLabelElement | HTMLSpanElement, CInputGroupTextProps>(
18
- ({ children, className, component: Component = 'span', ...rest }, ref) => {
19
- return (
20
- <Component className={classNames('input-group-text', className)} {...rest} ref={ref}>
21
- {children}
22
- </Component>
23
- )
24
- },
25
- )
19
+ export const CInputGroupText: PolymorphicRefForwardingComponent<'span', CInputGroupTextProps> =
20
+ forwardRef<HTMLLabelElement | HTMLSpanElement, CInputGroupTextProps>(
21
+ ({ children, as: Component = 'span', className, ...rest }, ref) => {
22
+ return (
23
+ <Component className={classNames('input-group-text', className)} {...rest} ref={ref}>
24
+ {children}
25
+ </Component>
26
+ )
27
+ },
28
+ )
26
29
 
27
30
  CInputGroupText.propTypes = {
31
+ as: PropTypes.elementType,
28
32
  children: PropTypes.node,
29
33
  className: PropTypes.string,
30
- component: PropTypes.elementType,
31
34
  }
32
35
 
33
36
  CInputGroupText.displayName = 'CInputGroupText'
@@ -10,7 +10,7 @@ test('loads and displays CFormText component', async () => {
10
10
 
11
11
  test('CFormText customize', async () => {
12
12
  const { container } = render(
13
- <CFormText className="bazinga" component="h3">
13
+ <CFormText className="bazinga" as="h3">
14
14
  Test
15
15
  </CFormText>,
16
16
  )
@@ -10,7 +10,7 @@ test('loads and displays CInputGroupText component', async () => {
10
10
 
11
11
  test('renders CInputGroupText component as a label', async () => {
12
12
  const { container } = render(
13
- <CInputGroupText component="label" htmlFor="input">
13
+ <CInputGroupText as="label" htmlFor="input">
14
14
  Test
15
15
  </CInputGroupText>,
16
16
  )
@@ -2,32 +2,35 @@ import React, { ElementType, forwardRef, AnchorHTMLAttributes } 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 CHeaderBrandProps
6
8
  extends AnchorHTMLAttributes<HTMLAnchorElement | HTMLSpanElement> {
7
9
  /**
8
- * A string of all className you want applied to the 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 component.
13
15
  */
14
- component?: string | ElementType
16
+ className?: string
15
17
  }
16
18
 
17
- export const CHeaderBrand = forwardRef<HTMLAnchorElement | HTMLSpanElement, CHeaderBrandProps>(
18
- ({ children, component: Component = 'a', className, ...rest }, ref) => {
19
- return (
20
- <Component className={classNames('header-brand', className)} {...rest} ref={ref}>
21
- {children}
22
- </Component>
23
- )
24
- },
25
- )
19
+ export const CHeaderBrand: PolymorphicRefForwardingComponent<'a', CHeaderBrandProps> = forwardRef<
20
+ HTMLAnchorElement | HTMLSpanElement,
21
+ CHeaderBrandProps
22
+ >(({ children, as: Component = 'a', className, ...rest }, ref) => {
23
+ return (
24
+ <Component className={classNames('header-brand', className)} {...rest} ref={ref}>
25
+ {children}
26
+ </Component>
27
+ )
28
+ })
26
29
 
27
30
  CHeaderBrand.propTypes = {
31
+ as: PropTypes.elementType,
28
32
  children: PropTypes.node,
29
33
  className: PropTypes.string,
30
- component: PropTypes.elementType,
31
34
  }
32
35
 
33
36
  CHeaderBrand.displayName = 'CHeaderBrand'
@@ -2,36 +2,39 @@ 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 CHeaderNavProps extends HTMLAttributes<HTMLDivElement | HTMLUListElement> {
6
8
  /**
7
- * A string of all className you want applied to the component.
9
+ * Component used for the root node. Either a string to use a HTML element or a component.
8
10
  */
9
- className?: string
11
+ as?: ElementType
10
12
  /**
11
- * Component used for the root node. Either a string to use a HTML element or a component.
13
+ * A string of all className you want applied to the component.
12
14
  */
13
- component?: string | ElementType
15
+ className?: string
14
16
  }
15
17
 
16
- export const CHeaderNav = forwardRef<HTMLDivElement | HTMLUListElement, CHeaderNavProps>(
17
- ({ children, component: Component = 'ul', className, ...rest }, ref) => {
18
- return (
19
- <Component
20
- className={classNames('header-nav', className)}
21
- role="navigation"
22
- {...rest}
23
- ref={ref}
24
- >
25
- {children}
26
- </Component>
27
- )
28
- },
29
- )
18
+ export const CHeaderNav: PolymorphicRefForwardingComponent<'ul', CHeaderNavProps> = forwardRef<
19
+ HTMLDivElement | HTMLUListElement,
20
+ CHeaderNavProps
21
+ >(({ children, as: Component = 'ul', className, ...rest }, ref) => {
22
+ return (
23
+ <Component
24
+ className={classNames('header-nav', className)}
25
+ role="navigation"
26
+ {...rest}
27
+ ref={ref}
28
+ >
29
+ {children}
30
+ </Component>
31
+ )
32
+ })
30
33
 
31
34
  CHeaderNav.propTypes = {
35
+ as: PropTypes.elementType,
32
36
  children: PropTypes.node,
33
37
  className: PropTypes.string,
34
- component: PropTypes.elementType,
35
38
  }
36
39
 
37
40
  CHeaderNav.displayName = 'CHeaderNav'
@@ -10,7 +10,7 @@ test('loads and displays CHeaderBrand component', async () => {
10
10
 
11
11
  test('CHeaderBrand customize', async () => {
12
12
  const { container } = render(
13
- <CHeaderBrand className="bazinga" component="h3">
13
+ <CHeaderBrand className="bazinga" as="h3">
14
14
  Test
15
15
  </CHeaderBrand>,
16
16
  )
@@ -10,7 +10,7 @@ test('loads and displays CHeaderNav component', async () => {
10
10
 
11
11
  test('CHeaderNav customize', async () => {
12
12
  const { container } = render(
13
- <CHeaderNav className="bazinga" component="h3">
13
+ <CHeaderNav className="bazinga" as="h3">
14
14
  Test
15
15
  </CHeaderNav>,
16
16
  )
@@ -2,19 +2,22 @@ import React, { AllHTMLAttributes, ElementType, forwardRef, MouseEvent } from 'r
2
2
  import PropTypes from 'prop-types'
3
3
  import classNames from 'classnames'
4
4
 
5
- export interface CLinkProps extends AllHTMLAttributes<HTMLButtonElement | HTMLAnchorElement> {
5
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
6
+
7
+ export interface CLinkProps
8
+ extends Omit<AllHTMLAttributes<HTMLButtonElement | HTMLAnchorElement>, 'as'> {
6
9
  /**
7
10
  * Toggle the active state for the component.
8
11
  */
9
12
  active?: boolean
10
13
  /**
11
- * A string of all className you want applied to the component.
14
+ * Component used for the root node. Either a string to use a HTML element or a component.
12
15
  */
13
- className?: string
16
+ as?: ElementType
14
17
  /**
15
- * Component used for the root node. Either a string to use a HTML element or a component.
18
+ * A string of all className you want applied to the component.
16
19
  */
17
- component?: string | ElementType
20
+ className?: string
18
21
  /**
19
22
  * Toggle the disabled state for the component.
20
23
  */
@@ -25,35 +28,36 @@ export interface CLinkProps extends AllHTMLAttributes<HTMLButtonElement | HTMLAn
25
28
  href?: string
26
29
  }
27
30
 
28
- export const CLink = forwardRef<HTMLButtonElement | HTMLAnchorElement, CLinkProps>(
29
- ({ children, active, className, component: Component = 'a', disabled, ...rest }, ref) => {
30
- return (
31
- <Component
32
- // TODO: remove duplicated classes ex. `active active` in `<CListGroupItem>`
33
- className={classNames(className, { active, disabled })}
34
- {...(active && { 'aria-current': 'page' })}
35
- {...(Component === 'a' && disabled && { 'aria-disabled': true, tabIndex: -1 })}
36
- {...((Component === 'a' || Component === 'button') && {
37
- onClick: (event: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {
38
- event.preventDefault
39
- !disabled && rest.onClick && rest.onClick(event)
40
- },
41
- })}
42
- disabled={disabled}
43
- {...rest}
44
- ref={ref}
45
- >
46
- {children}
47
- </Component>
48
- )
49
- },
50
- )
31
+ export const CLink: PolymorphicRefForwardingComponent<'a', CLinkProps> = forwardRef<
32
+ HTMLButtonElement | HTMLAnchorElement,
33
+ CLinkProps
34
+ >(({ children, active, as: Component = 'a', className, disabled, ...rest }, ref) => {
35
+ return (
36
+ <Component
37
+ // TODO: remove duplicated classes ex. `active active` in `<CListGroupItem>`
38
+ className={classNames(className, { active, disabled })}
39
+ {...(active && { 'aria-current': 'page' })}
40
+ {...(Component === 'a' && disabled && { 'aria-disabled': true, tabIndex: -1 })}
41
+ {...((Component === 'a' || Component === 'button') && {
42
+ onClick: (event: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {
43
+ event.preventDefault
44
+ !disabled && rest.onClick && rest.onClick(event)
45
+ },
46
+ })}
47
+ disabled={disabled}
48
+ {...rest}
49
+ ref={ref}
50
+ >
51
+ {children}
52
+ </Component>
53
+ )
54
+ })
51
55
 
52
56
  CLink.propTypes = {
53
57
  active: PropTypes.bool,
58
+ as: PropTypes.elementType,
54
59
  children: PropTypes.node,
55
60
  className: PropTypes.string,
56
- component: PropTypes.elementType,
57
61
  disabled: PropTypes.bool,
58
62
  }
59
63
 
@@ -10,7 +10,7 @@ test('loads and displays CLink component', async () => {
10
10
 
11
11
  test('CLink customize', async () => {
12
12
  const { container } = render(
13
- <CLink className="bazinga" active={true} component="button" disabled type="submit">
13
+ <CLink className="bazinga" active={true} as="button" disabled type="submit">
14
14
  Test
15
15
  </CLink>,
16
16
  )
@@ -38,7 +38,7 @@ test('CLink click on button', async () => {
38
38
  test('CLink click on disabled button', async () => {
39
39
  const click = jest.fn()
40
40
  render(
41
- <CLink onClick={click} className="bazinga" component="button" disabled>
41
+ <CLink onClick={click} className="bazinga" as="button" disabled>
42
42
  Test
43
43
  </CLink>,
44
44
  )
@@ -2,15 +2,17 @@ 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 CListGroupProps extends HTMLAttributes<HTMLDivElement | HTMLUListElement> {
6
8
  /**
7
- * A string of all className you want applied to the component.
9
+ * Component used for the root node. Either a string to use a HTML element or a component.
8
10
  */
9
- className?: string
11
+ as?: ElementType
10
12
  /**
11
- * Component used for the root node. Either a string to use a HTML element or a component.
13
+ * A string of all className you want applied to the component.
12
14
  */
13
- component?: string | ElementType
15
+ className?: string
14
16
  /**
15
17
  * Remove some borders and rounded corners to render list group items edge-to-edge in a parent component (e.g., `<CCard>`).
16
18
  */
@@ -27,30 +29,31 @@ export interface CListGroupProps extends HTMLAttributes<HTMLDivElement | HTMLULi
27
29
  | 'horizontal-xxl'
28
30
  }
29
31
 
30
- export const CListGroup = forwardRef<HTMLDivElement | HTMLUListElement, CListGroupProps>(
31
- ({ children, className, component: Component = 'ul', flush, layout }, ref) => {
32
- return (
33
- <Component
34
- className={classNames(
35
- 'list-group',
36
- {
37
- 'list-group-flush': flush,
38
- [`list-group-${layout}`]: layout,
39
- },
40
- className,
41
- )}
42
- ref={ref}
43
- >
44
- {children}
45
- </Component>
46
- )
47
- },
48
- )
32
+ export const CListGroup: PolymorphicRefForwardingComponent<'ul', CListGroupProps> = forwardRef<
33
+ HTMLDivElement | HTMLUListElement,
34
+ CListGroupProps
35
+ >(({ children, as: Component = 'ul', className, flush, layout }, ref) => {
36
+ return (
37
+ <Component
38
+ className={classNames(
39
+ 'list-group',
40
+ {
41
+ 'list-group-flush': flush,
42
+ [`list-group-${layout}`]: layout,
43
+ },
44
+ className,
45
+ )}
46
+ ref={ref}
47
+ >
48
+ {children}
49
+ </Component>
50
+ )
51
+ })
49
52
 
50
53
  CListGroup.propTypes = {
54
+ as: PropTypes.elementType,
51
55
  children: PropTypes.node,
52
56
  className: PropTypes.string,
53
- component: PropTypes.elementType,
54
57
  flush: PropTypes.bool,
55
58
  layout: PropTypes.oneOf([
56
59
  'horizontal',
@@ -4,6 +4,7 @@ import classNames from 'classnames'
4
4
 
5
5
  import { CLink } from '../link/CLink'
6
6
 
7
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
7
8
  import { colorPropType } from '../../props'
8
9
  import type { Colors } from '../../types'
9
10
 
@@ -13,6 +14,10 @@ export interface CListGroupItemProps
13
14
  * Toggle the active state for the component.
14
15
  */
15
16
  active?: boolean
17
+ /**
18
+ * Component used for the root node. Either a string to use a HTML element or a component.
19
+ */
20
+ as?: ElementType
16
21
  /**
17
22
  * A string of all className you want applied to the component.
18
23
  */
@@ -27,55 +32,51 @@ export interface CListGroupItemProps
27
32
  * Toggle the disabled state for the component.
28
33
  */
29
34
  disabled?: boolean
30
- /**
31
- * Component used for the root node. Either a string to use a HTML element or a component.
32
- */
33
- component?: string | ElementType
34
35
  }
35
36
 
36
- export const CListGroupItem = forwardRef<
37
- HTMLLIElement | HTMLAnchorElement | HTMLButtonElement,
38
- CListGroupItemProps
39
- >(({ children, active, className, disabled, color, component = 'li', ...rest }, ref) => {
40
- const Component = component === 'a' || component === 'button' ? CLink : component
37
+ export const CListGroupItem: PolymorphicRefForwardingComponent<'li', CListGroupItemProps> =
38
+ forwardRef<HTMLLIElement | HTMLAnchorElement | HTMLButtonElement, CListGroupItemProps>(
39
+ ({ children, active, as = 'li', className, disabled, color, ...rest }, ref) => {
40
+ const Component = as === 'a' || as === 'button' ? CLink : as
41
41
 
42
- rest = {
43
- ...((component === 'a' || component === 'button') && {
44
- active,
45
- disabled,
46
- component,
47
- ref: ref,
48
- }),
49
- ...(active && { 'aria-current': true }),
50
- ...(disabled && { 'aria-disabled': true }),
51
- ...rest,
52
- }
53
-
54
- return (
55
- <Component
56
- className={classNames(
57
- 'list-group-item',
58
- {
59
- [`list-group-item-${color}`]: color,
60
- 'list-group-item-action': component === 'a' || component === 'button',
42
+ rest = {
43
+ ...((as === 'a' || as === 'button') && {
61
44
  active,
62
45
  disabled,
63
- },
64
- className,
65
- )}
66
- {...rest}
67
- >
68
- {children}
69
- </Component>
46
+ as,
47
+ ref: ref,
48
+ }),
49
+ ...(active && { 'aria-current': true }),
50
+ ...(disabled && { 'aria-disabled': true }),
51
+ ...rest,
52
+ }
53
+
54
+ return (
55
+ <Component
56
+ className={classNames(
57
+ 'list-group-item',
58
+ {
59
+ [`list-group-item-${color}`]: color,
60
+ 'list-group-item-action': as === 'a' || as === 'button',
61
+ active,
62
+ disabled,
63
+ },
64
+ className,
65
+ )}
66
+ {...rest}
67
+ >
68
+ {children}
69
+ </Component>
70
+ )
71
+ },
70
72
  )
71
- })
72
73
 
73
74
  CListGroupItem.propTypes = {
74
75
  active: PropTypes.bool,
76
+ as: PropTypes.elementType,
75
77
  children: PropTypes.node,
76
78
  className: PropTypes.string,
77
79
  color: colorPropType,
78
- component: PropTypes.elementType,
79
80
  disabled: PropTypes.bool,
80
81
  }
81
82
 
@@ -10,7 +10,7 @@ test('loads and displays CListGroup component', async () => {
10
10
 
11
11
  test('CListGroup customize', async () => {
12
12
  const { container } = render(
13
- <CListGroup className="bazinga" component="h3" flush={true} layout="horizontal-xl">
13
+ <CListGroup className="bazinga" as="h3" flush={true} layout="horizontal-xl">
14
14
  Test
15
15
  </CListGroup>,
16
16
  )
@@ -10,13 +10,7 @@ test('loads and displays CListGroupItem component', async () => {
10
10
 
11
11
  test('CListGroupItem customize', async () => {
12
12
  const { container } = render(
13
- <CListGroupItem
14
- className="bazinga"
15
- active={true}
16
- color="warning"
17
- disabled={true}
18
- component="button"
19
- >
13
+ <CListGroupItem className="bazinga" active={true} color="warning" disabled={true} as="button">
20
14
  Test
21
15
  </CListGroupItem>,
22
16
  )