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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) 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/card/CCardHeader.d.ts +7 -6
  12. package/dist/cjs/components/card/CCardHeader.js +2 -2
  13. package/dist/cjs/components/card/CCardHeader.js.map +1 -1
  14. package/dist/cjs/components/card/CCardImage.d.ts +7 -6
  15. package/dist/cjs/components/card/CCardImage.js +2 -2
  16. package/dist/cjs/components/card/CCardImage.js.map +1 -1
  17. package/dist/cjs/components/card/CCardSubtitle.d.ts +7 -6
  18. package/dist/cjs/components/card/CCardSubtitle.js +2 -2
  19. package/dist/cjs/components/card/CCardSubtitle.js.map +1 -1
  20. package/dist/cjs/components/card/CCardText.d.ts +7 -6
  21. package/dist/cjs/components/card/CCardText.js +2 -2
  22. package/dist/cjs/components/card/CCardText.js.map +1 -1
  23. package/dist/cjs/components/card/CCardTitle.d.ts +7 -6
  24. package/dist/cjs/components/card/CCardTitle.js +2 -2
  25. package/dist/cjs/components/card/CCardTitle.js.map +1 -1
  26. package/dist/cjs/components/dropdown/CDropdown.d.ts +6 -5
  27. package/dist/cjs/components/dropdown/CDropdown.js +3 -3
  28. package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
  29. package/dist/cjs/components/dropdown/CDropdownHeader.d.ts +7 -6
  30. package/dist/cjs/components/dropdown/CDropdownHeader.js +2 -2
  31. package/dist/cjs/components/dropdown/CDropdownHeader.js.map +1 -1
  32. package/dist/cjs/components/dropdown/CDropdownItem.d.ts +2 -6
  33. package/dist/cjs/components/dropdown/CDropdownItem.js +3 -3
  34. package/dist/cjs/components/dropdown/CDropdownItem.js.map +1 -1
  35. package/dist/cjs/components/dropdown/CDropdownItemPlain.d.ts +7 -6
  36. package/dist/cjs/components/dropdown/CDropdownItemPlain.js +2 -2
  37. package/dist/cjs/components/dropdown/CDropdownItemPlain.js.map +1 -1
  38. package/dist/cjs/components/dropdown/CDropdownMenu.d.ts +7 -6
  39. package/dist/cjs/components/dropdown/CDropdownMenu.js +2 -2
  40. package/dist/cjs/components/dropdown/CDropdownMenu.js.map +1 -1
  41. package/dist/cjs/components/dropdown/CDropdownToggle.d.ts +1 -1
  42. package/dist/cjs/components/form/CFormFeedback.d.ts +7 -6
  43. package/dist/cjs/components/form/CFormFeedback.js +2 -2
  44. package/dist/cjs/components/form/CFormFeedback.js.map +1 -1
  45. package/dist/cjs/components/form/CFormText.d.ts +7 -6
  46. package/dist/cjs/components/form/CFormText.js +2 -2
  47. package/dist/cjs/components/form/CFormText.js.map +1 -1
  48. package/dist/cjs/components/form/CInputGroupText.d.ts +7 -6
  49. package/dist/cjs/components/form/CInputGroupText.js +2 -2
  50. package/dist/cjs/components/form/CInputGroupText.js.map +1 -1
  51. package/dist/cjs/components/header/CHeaderBrand.d.ts +7 -6
  52. package/dist/cjs/components/header/CHeaderBrand.js +2 -2
  53. package/dist/cjs/components/header/CHeaderBrand.js.map +1 -1
  54. package/dist/cjs/components/header/CHeaderNav.d.ts +7 -6
  55. package/dist/cjs/components/header/CHeaderNav.js +2 -2
  56. package/dist/cjs/components/header/CHeaderNav.js.map +1 -1
  57. package/dist/cjs/components/link/CLink.d.ts +8 -7
  58. package/dist/cjs/components/link/CLink.js +2 -2
  59. package/dist/cjs/components/link/CLink.js.map +1 -1
  60. package/dist/cjs/components/list-group/CListGroup.d.ts +7 -6
  61. package/dist/cjs/components/list-group/CListGroup.js +2 -2
  62. package/dist/cjs/components/list-group/CListGroup.js.map +1 -1
  63. package/dist/cjs/components/list-group/CListGroupItem.d.ts +7 -6
  64. package/dist/cjs/components/list-group/CListGroupItem.js +6 -6
  65. package/dist/cjs/components/list-group/CListGroupItem.js.map +1 -1
  66. package/dist/cjs/components/modal/CModal.js +1 -2
  67. package/dist/cjs/components/modal/CModal.js.map +1 -1
  68. package/dist/cjs/components/modal/CModalTitle.d.ts +4 -3
  69. package/dist/cjs/components/modal/CModalTitle.js +2 -2
  70. package/dist/cjs/components/modal/CModalTitle.js.map +1 -1
  71. package/dist/cjs/components/nav/CNav.d.ts +7 -6
  72. package/dist/cjs/components/nav/CNav.js +2 -2
  73. package/dist/cjs/components/nav/CNav.js.map +1 -1
  74. package/dist/cjs/components/nav/CNavGroup.d.ts +10 -4
  75. package/dist/cjs/components/nav/CNavGroup.js +11 -16
  76. package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
  77. package/dist/cjs/components/nav/CNavGroupItems.d.ts +10 -3
  78. package/dist/cjs/components/nav/CNavGroupItems.js +3 -2
  79. package/dist/cjs/components/nav/CNavGroupItems.js.map +1 -1
  80. package/dist/cjs/components/nav/CNavItem.d.ts +11 -2
  81. package/dist/cjs/components/nav/CNavItem.js +3 -2
  82. package/dist/cjs/components/nav/CNavItem.js.map +1 -1
  83. package/dist/cjs/components/nav/CNavLink.d.ts +2 -18
  84. package/dist/cjs/components/nav/CNavLink.js +3 -0
  85. package/dist/cjs/components/nav/CNavLink.js.map +1 -1
  86. package/dist/cjs/components/nav/CNavTitle.d.ts +7 -2
  87. package/dist/cjs/components/nav/CNavTitle.js +3 -2
  88. package/dist/cjs/components/nav/CNavTitle.js.map +1 -1
  89. package/dist/cjs/components/navbar/CNavbar.d.ts +7 -6
  90. package/dist/cjs/components/navbar/CNavbar.js +2 -2
  91. package/dist/cjs/components/navbar/CNavbar.js.map +1 -1
  92. package/dist/cjs/components/navbar/CNavbarBrand.d.ts +8 -7
  93. package/dist/cjs/components/navbar/CNavbarBrand.js +3 -3
  94. package/dist/cjs/components/navbar/CNavbarBrand.js.map +1 -1
  95. package/dist/cjs/components/navbar/CNavbarNav.d.ts +7 -6
  96. package/dist/cjs/components/navbar/CNavbarNav.js +3 -3
  97. package/dist/cjs/components/navbar/CNavbarNav.js.map +1 -1
  98. package/dist/cjs/components/offcanvas/COffcanvasTitle.d.ts +7 -6
  99. package/dist/cjs/components/offcanvas/COffcanvasTitle.js +2 -2
  100. package/dist/cjs/components/offcanvas/COffcanvasTitle.js.map +1 -1
  101. package/dist/cjs/components/pagination/CPaginationItem.d.ts +4 -3
  102. package/dist/cjs/components/pagination/CPaginationItem.js +4 -4
  103. package/dist/cjs/components/pagination/CPaginationItem.js.map +1 -1
  104. package/dist/cjs/components/placeholder/CPlaceholder.d.ts +7 -6
  105. package/dist/cjs/components/placeholder/CPlaceholder.js +2 -2
  106. package/dist/cjs/components/placeholder/CPlaceholder.js.map +1 -1
  107. package/dist/cjs/components/popover/CPopover.js +19 -12
  108. package/dist/cjs/components/popover/CPopover.js.map +1 -1
  109. package/dist/cjs/components/sidebar/CSidebarBrand.d.ts +10 -3
  110. package/dist/cjs/components/sidebar/CSidebarBrand.js +3 -2
  111. package/dist/cjs/components/sidebar/CSidebarBrand.js.map +1 -1
  112. package/dist/cjs/components/sidebar/CSidebarNav.d.ts +9 -2
  113. package/dist/cjs/components/sidebar/CSidebarNav.js +30 -12
  114. package/dist/cjs/components/sidebar/CSidebarNav.js.map +1 -1
  115. package/dist/cjs/components/spinner/CSpinner.d.ts +7 -6
  116. package/dist/cjs/components/spinner/CSpinner.js +2 -2
  117. package/dist/cjs/components/spinner/CSpinner.js.map +1 -1
  118. package/dist/cjs/components/toast/CToastClose.d.ts +5 -4
  119. package/dist/cjs/components/toast/CToastClose.js +2 -2
  120. package/dist/cjs/components/toast/CToastClose.js.map +1 -1
  121. package/dist/cjs/components/tooltip/CTooltip.js +19 -12
  122. package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
  123. package/dist/cjs/helpers/index.d.ts +2 -0
  124. package/dist/cjs/helpers/polymorphicComponent.d.ts +14 -0
  125. package/dist/esm/components/alert/CAlertHeading.d.ts +7 -6
  126. package/dist/esm/components/alert/CAlertHeading.js +2 -2
  127. package/dist/esm/components/alert/CAlertHeading.js.map +1 -1
  128. package/dist/esm/components/badge/CBadge.d.ts +7 -6
  129. package/dist/esm/components/badge/CBadge.js +2 -2
  130. package/dist/esm/components/badge/CBadge.js.map +1 -1
  131. package/dist/esm/components/button/CButton.d.ts +7 -6
  132. package/dist/esm/components/button/CButton.js +3 -3
  133. package/dist/esm/components/button/CButton.js.map +1 -1
  134. package/dist/esm/components/card/CCardHeader.d.ts +7 -6
  135. package/dist/esm/components/card/CCardHeader.js +2 -2
  136. package/dist/esm/components/card/CCardHeader.js.map +1 -1
  137. package/dist/esm/components/card/CCardImage.d.ts +7 -6
  138. package/dist/esm/components/card/CCardImage.js +2 -2
  139. package/dist/esm/components/card/CCardImage.js.map +1 -1
  140. package/dist/esm/components/card/CCardSubtitle.d.ts +7 -6
  141. package/dist/esm/components/card/CCardSubtitle.js +2 -2
  142. package/dist/esm/components/card/CCardSubtitle.js.map +1 -1
  143. package/dist/esm/components/card/CCardText.d.ts +7 -6
  144. package/dist/esm/components/card/CCardText.js +2 -2
  145. package/dist/esm/components/card/CCardText.js.map +1 -1
  146. package/dist/esm/components/card/CCardTitle.d.ts +7 -6
  147. package/dist/esm/components/card/CCardTitle.js +2 -2
  148. package/dist/esm/components/card/CCardTitle.js.map +1 -1
  149. package/dist/esm/components/dropdown/CDropdown.d.ts +6 -5
  150. package/dist/esm/components/dropdown/CDropdown.js +3 -3
  151. package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
  152. package/dist/esm/components/dropdown/CDropdownHeader.d.ts +7 -6
  153. package/dist/esm/components/dropdown/CDropdownHeader.js +2 -2
  154. package/dist/esm/components/dropdown/CDropdownHeader.js.map +1 -1
  155. package/dist/esm/components/dropdown/CDropdownItem.d.ts +2 -6
  156. package/dist/esm/components/dropdown/CDropdownItem.js +3 -3
  157. package/dist/esm/components/dropdown/CDropdownItem.js.map +1 -1
  158. package/dist/esm/components/dropdown/CDropdownItemPlain.d.ts +7 -6
  159. package/dist/esm/components/dropdown/CDropdownItemPlain.js +2 -2
  160. package/dist/esm/components/dropdown/CDropdownItemPlain.js.map +1 -1
  161. package/dist/esm/components/dropdown/CDropdownMenu.d.ts +7 -6
  162. package/dist/esm/components/dropdown/CDropdownMenu.js +2 -2
  163. package/dist/esm/components/dropdown/CDropdownMenu.js.map +1 -1
  164. package/dist/esm/components/dropdown/CDropdownToggle.d.ts +1 -1
  165. package/dist/esm/components/form/CFormFeedback.d.ts +7 -6
  166. package/dist/esm/components/form/CFormFeedback.js +2 -2
  167. package/dist/esm/components/form/CFormFeedback.js.map +1 -1
  168. package/dist/esm/components/form/CFormText.d.ts +7 -6
  169. package/dist/esm/components/form/CFormText.js +2 -2
  170. package/dist/esm/components/form/CFormText.js.map +1 -1
  171. package/dist/esm/components/form/CInputGroupText.d.ts +7 -6
  172. package/dist/esm/components/form/CInputGroupText.js +2 -2
  173. package/dist/esm/components/form/CInputGroupText.js.map +1 -1
  174. package/dist/esm/components/header/CHeaderBrand.d.ts +7 -6
  175. package/dist/esm/components/header/CHeaderBrand.js +2 -2
  176. package/dist/esm/components/header/CHeaderBrand.js.map +1 -1
  177. package/dist/esm/components/header/CHeaderNav.d.ts +7 -6
  178. package/dist/esm/components/header/CHeaderNav.js +2 -2
  179. package/dist/esm/components/header/CHeaderNav.js.map +1 -1
  180. package/dist/esm/components/link/CLink.d.ts +8 -7
  181. package/dist/esm/components/link/CLink.js +2 -2
  182. package/dist/esm/components/link/CLink.js.map +1 -1
  183. package/dist/esm/components/list-group/CListGroup.d.ts +7 -6
  184. package/dist/esm/components/list-group/CListGroup.js +2 -2
  185. package/dist/esm/components/list-group/CListGroup.js.map +1 -1
  186. package/dist/esm/components/list-group/CListGroupItem.d.ts +7 -6
  187. package/dist/esm/components/list-group/CListGroupItem.js +6 -6
  188. package/dist/esm/components/list-group/CListGroupItem.js.map +1 -1
  189. package/dist/esm/components/modal/CModal.js +1 -2
  190. package/dist/esm/components/modal/CModal.js.map +1 -1
  191. package/dist/esm/components/modal/CModalTitle.d.ts +4 -3
  192. package/dist/esm/components/modal/CModalTitle.js +2 -2
  193. package/dist/esm/components/modal/CModalTitle.js.map +1 -1
  194. package/dist/esm/components/nav/CNav.d.ts +7 -6
  195. package/dist/esm/components/nav/CNav.js +2 -2
  196. package/dist/esm/components/nav/CNav.js.map +1 -1
  197. package/dist/esm/components/nav/CNavGroup.d.ts +10 -4
  198. package/dist/esm/components/nav/CNavGroup.js +11 -16
  199. package/dist/esm/components/nav/CNavGroup.js.map +1 -1
  200. package/dist/esm/components/nav/CNavGroupItems.d.ts +10 -3
  201. package/dist/esm/components/nav/CNavGroupItems.js +3 -2
  202. package/dist/esm/components/nav/CNavGroupItems.js.map +1 -1
  203. package/dist/esm/components/nav/CNavItem.d.ts +11 -2
  204. package/dist/esm/components/nav/CNavItem.js +3 -2
  205. package/dist/esm/components/nav/CNavItem.js.map +1 -1
  206. package/dist/esm/components/nav/CNavLink.d.ts +2 -18
  207. package/dist/esm/components/nav/CNavLink.js +3 -0
  208. package/dist/esm/components/nav/CNavLink.js.map +1 -1
  209. package/dist/esm/components/nav/CNavTitle.d.ts +7 -2
  210. package/dist/esm/components/nav/CNavTitle.js +3 -2
  211. package/dist/esm/components/nav/CNavTitle.js.map +1 -1
  212. package/dist/esm/components/navbar/CNavbar.d.ts +7 -6
  213. package/dist/esm/components/navbar/CNavbar.js +2 -2
  214. package/dist/esm/components/navbar/CNavbar.js.map +1 -1
  215. package/dist/esm/components/navbar/CNavbarBrand.d.ts +8 -7
  216. package/dist/esm/components/navbar/CNavbarBrand.js +3 -3
  217. package/dist/esm/components/navbar/CNavbarBrand.js.map +1 -1
  218. package/dist/esm/components/navbar/CNavbarNav.d.ts +7 -6
  219. package/dist/esm/components/navbar/CNavbarNav.js +3 -3
  220. package/dist/esm/components/navbar/CNavbarNav.js.map +1 -1
  221. package/dist/esm/components/offcanvas/COffcanvasTitle.d.ts +7 -6
  222. package/dist/esm/components/offcanvas/COffcanvasTitle.js +2 -2
  223. package/dist/esm/components/offcanvas/COffcanvasTitle.js.map +1 -1
  224. package/dist/esm/components/pagination/CPaginationItem.d.ts +4 -3
  225. package/dist/esm/components/pagination/CPaginationItem.js +4 -4
  226. package/dist/esm/components/pagination/CPaginationItem.js.map +1 -1
  227. package/dist/esm/components/placeholder/CPlaceholder.d.ts +7 -6
  228. package/dist/esm/components/placeholder/CPlaceholder.js +2 -2
  229. package/dist/esm/components/placeholder/CPlaceholder.js.map +1 -1
  230. package/dist/esm/components/popover/CPopover.js +19 -12
  231. package/dist/esm/components/popover/CPopover.js.map +1 -1
  232. package/dist/esm/components/sidebar/CSidebarBrand.d.ts +10 -3
  233. package/dist/esm/components/sidebar/CSidebarBrand.js +3 -2
  234. package/dist/esm/components/sidebar/CSidebarBrand.js.map +1 -1
  235. package/dist/esm/components/sidebar/CSidebarNav.d.ts +9 -2
  236. package/dist/esm/components/sidebar/CSidebarNav.js +30 -12
  237. package/dist/esm/components/sidebar/CSidebarNav.js.map +1 -1
  238. package/dist/esm/components/spinner/CSpinner.d.ts +7 -6
  239. package/dist/esm/components/spinner/CSpinner.js +2 -2
  240. package/dist/esm/components/spinner/CSpinner.js.map +1 -1
  241. package/dist/esm/components/toast/CToastClose.d.ts +5 -4
  242. package/dist/esm/components/toast/CToastClose.js +2 -2
  243. package/dist/esm/components/toast/CToastClose.js.map +1 -1
  244. package/dist/esm/components/tooltip/CTooltip.js +19 -12
  245. package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
  246. package/dist/esm/helpers/index.d.ts +2 -0
  247. package/dist/esm/helpers/polymorphicComponent.d.ts +14 -0
  248. package/package.json +10 -10
  249. package/src/components/alert/CAlertHeading.tsx +17 -14
  250. package/src/components/alert/__tests__/CAlertHeading.spec.tsx +1 -1
  251. package/src/components/badge/CBadge.tsx +11 -7
  252. package/src/components/badge/__tests__/CBadge.spec.tsx +1 -1
  253. package/src/components/button/CButton.tsx +12 -18
  254. package/src/components/button/__tests__/CButton.spec.tsx +2 -2
  255. package/src/components/card/CCardHeader.tsx +17 -14
  256. package/src/components/card/CCardImage.tsx +9 -7
  257. package/src/components/card/CCardSubtitle.tsx +18 -14
  258. package/src/components/card/CCardText.tsx +17 -14
  259. package/src/components/card/CCardTitle.tsx +17 -14
  260. package/src/components/card/__tests__/CCardGroup.spec.tsx +1 -1
  261. package/src/components/card/__tests__/CCardHeader.spec.tsx +1 -1
  262. package/src/components/card/__tests__/CCardImage.spec.tsx +1 -3
  263. package/src/components/card/__tests__/CCardSubtitle.spec.tsx +1 -1
  264. package/src/components/card/__tests__/CCardText.spec.tsx +1 -1
  265. package/src/components/card/__tests__/CCardTitle.spec.tsx +1 -1
  266. package/src/components/conditional-portal/CConditionalPortal.tsx +1 -1
  267. package/src/components/dropdown/CDropdown.tsx +12 -8
  268. package/src/components/dropdown/CDropdownHeader.tsx +17 -14
  269. package/src/components/dropdown/CDropdownItem.tsx +14 -20
  270. package/src/components/dropdown/CDropdownItemPlain.tsx +12 -7
  271. package/src/components/dropdown/CDropdownMenu.tsx +43 -41
  272. package/src/components/dropdown/CDropdownToggle.tsx +1 -1
  273. package/src/components/dropdown/__tests__/CDropdown.spec.tsx +1 -1
  274. package/src/components/dropdown/__tests__/CDropdownHeader.spec.tsx +1 -1
  275. package/src/components/dropdown/__tests__/CDropdownItem.spec.tsx +1 -1
  276. package/src/components/dropdown/__tests__/CDropdownItemPlain.spec.tsx +1 -1
  277. package/src/components/dropdown/__tests__/CDropdownMenu.spec.tsx +1 -1
  278. package/src/components/dropdown/types.ts +1 -1
  279. package/src/components/form/CFormFeedback.tsx +28 -27
  280. package/src/components/form/CFormText.tsx +17 -14
  281. package/src/components/form/CInputGroupText.tsx +17 -14
  282. package/src/components/form/__tests__/CFormText.spec.tsx +1 -1
  283. package/src/components/form/__tests__/CInputGroupText.spec.tsx +1 -1
  284. package/src/components/header/CHeaderBrand.tsx +17 -14
  285. package/src/components/header/CHeaderNav.tsx +22 -19
  286. package/src/components/header/__tests__/CHeaderBrand.spec.tsx +1 -1
  287. package/src/components/header/__tests__/CHeaderNav.spec.tsx +1 -1
  288. package/src/components/link/CLink.tsx +33 -29
  289. package/src/components/link/__tests__/CLink.spec.tsx +2 -2
  290. package/src/components/list-group/CListGroup.tsx +27 -24
  291. package/src/components/list-group/CListGroupItem.tsx +38 -37
  292. package/src/components/list-group/__tests__/CListGroup.spec.tsx +1 -1
  293. package/src/components/list-group/__tests__/CListGroupItem.spec.tsx +1 -7
  294. package/src/components/modal/CModal.tsx +1 -4
  295. package/src/components/modal/CModalTitle.tsx +14 -11
  296. package/src/components/modal/__tests__/CModalTitle.spec.tsx +1 -1
  297. package/src/components/nav/CNav.tsx +29 -26
  298. package/src/components/nav/CNavGroup.tsx +111 -100
  299. package/src/components/nav/CNavGroupItems.tsx +21 -11
  300. package/src/components/nav/CNavItem.tsx +29 -16
  301. package/src/components/nav/CNavLink.tsx +7 -19
  302. package/src/components/nav/CNavTitle.tsx +18 -10
  303. package/src/components/nav/__tests__/CNav.spec.tsx +1 -1
  304. package/src/components/nav/__tests__/CNavItem.spec.tsx +1 -1
  305. package/src/components/nav/__tests__/CNavLink.spec.tsx +1 -1
  306. package/src/components/navbar/CNavbar.tsx +11 -7
  307. package/src/components/navbar/CNavbarBrand.tsx +19 -16
  308. package/src/components/navbar/CNavbarNav.tsx +22 -19
  309. package/src/components/navbar/__tests__/CNavbar.spec.tsx +1 -1
  310. package/src/components/navbar/__tests__/CNavbarBrand.spec.tsx +1 -1
  311. package/src/components/navbar/__tests__/CNavbarNav.spec.tsx +1 -1
  312. package/src/components/offcanvas/COffcanvasTitle.tsx +17 -14
  313. package/src/components/offcanvas/__tests__/COffcanvasTitle.spec.tsx +1 -1
  314. package/src/components/pagination/CPaginationItem.tsx +33 -30
  315. package/src/components/pagination/__tests__/CPaginationItem.spec.tsx +1 -1
  316. package/src/components/placeholder/CPlaceholder.tsx +40 -41
  317. package/src/components/popover/CPopover.tsx +24 -13
  318. package/src/components/sidebar/CSidebarBrand.tsx +21 -11
  319. package/src/components/sidebar/CSidebarNav.tsx +68 -24
  320. package/src/components/spinner/CSpinner.tsx +11 -7
  321. package/src/components/spinner/__tests__/CSpinner.spec.tsx +1 -1
  322. package/src/components/toast/CToastClose.tsx +8 -7
  323. package/src/components/tooltip/CTooltip.tsx +24 -12
  324. package/src/helpers/index.ts +3 -0
  325. package/src/helpers/polymorphicComponent.ts +21 -0
@@ -10,7 +10,7 @@ test('loads and displays CCardHeader component', async () => {
10
10
 
11
11
  test('CCardHeader customize', async () => {
12
12
  const { container } = render(
13
- <CCardHeader className="bazinga" component="h3">
13
+ <CCardHeader className="bazinga" as="h3">
14
14
  Test
15
15
  </CCardHeader>,
16
16
  )
@@ -9,9 +9,7 @@ test('loads and displays CCardImage component', async () => {
9
9
  })
10
10
 
11
11
  test('CCardImage customize', async () => {
12
- const { container } = render(
13
- <CCardImage className="bazinga" component="div" orientation="bottom" />,
14
- )
12
+ const { container } = render(<CCardImage className="bazinga" as="div" orientation="bottom" />)
15
13
  expect(container).toMatchSnapshot()
16
14
  expect(container.firstChild).toHaveClass('bazinga')
17
15
  expect(container.firstChild).toHaveClass('card-img-bottom')
@@ -10,7 +10,7 @@ test('loads and displays CCardSubtitle component', async () => {
10
10
 
11
11
  test('CCardSubtitle customize', async () => {
12
12
  const { container } = render(
13
- <CCardSubtitle className="bazinga" component="h3">
13
+ <CCardSubtitle className="bazinga" as="h3">
14
14
  Test
15
15
  </CCardSubtitle>,
16
16
  )
@@ -10,7 +10,7 @@ test('loads and displays CCardText component', async () => {
10
10
 
11
11
  test('CCardText customize', async () => {
12
12
  const { container } = render(
13
- <CCardText className="bazinga" component="h3">
13
+ <CCardText className="bazinga" as="h3">
14
14
  Test
15
15
  </CCardText>,
16
16
  )
@@ -10,7 +10,7 @@ test('loads and displays CCardTitle component', async () => {
10
10
 
11
11
  test('CCardTitle customize', async () => {
12
12
  const { container } = render(
13
- <CCardTitle className="bazinga" component="h3">
13
+ <CCardTitle className="bazinga" as="h3">
14
14
  Test
15
15
  </CCardTitle>,
16
16
  )
@@ -17,7 +17,7 @@ export interface CConditionalPortalProps {
17
17
  children: ReactNode
18
18
  /**
19
19
  * An HTML element or function that returns a single element, with `document.body` as the default.
20
- *
20
+ *
21
21
  * @since v4.11.0
22
22
  */
23
23
  container?: Element | (() => Element | null) | null
@@ -11,6 +11,7 @@ import React, {
11
11
  import PropTypes from 'prop-types'
12
12
  import classNames from 'classnames'
13
13
 
14
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
14
15
  import { useForkedRef, usePopper } from '../../hooks'
15
16
  import { placementPropType } from '../../props'
16
17
  import type { Placements } from '../../types'
@@ -26,6 +27,10 @@ export interface CDropdownProps extends HTMLAttributes<HTMLDivElement | HTMLLIEl
26
27
  * @type 'start' | 'end' | { xs: 'start' | 'end' } | { sm: 'start' | 'end' } | { md: 'start' | 'end' } | { lg: 'start' | 'end' } | { xl: 'start' | 'end'} | { xxl: 'start' | 'end'}
27
28
  */
28
29
  alignment?: Alignments
30
+ /**
31
+ * Component used for the root node. Either a string to use a HTML element or a component.
32
+ */
33
+ as?: ElementType
29
34
  /**
30
35
  * Configure the auto close behavior of the dropdown:
31
36
  * - `true` - the dropdown will be closed by clicking outside or inside the dropdown menu.
@@ -38,10 +43,6 @@ export interface CDropdownProps extends HTMLAttributes<HTMLDivElement | HTMLLIEl
38
43
  * A string of all className you want applied to the base component.
39
44
  */
40
45
  className?: string
41
- /**
42
- * Component used for the root node. Either a string to use a HTML element or a component.
43
- */
44
- component?: string | ElementType
45
46
  /**
46
47
  * Appends the react dropdown menu to a specific element. You can pass an HTML element or function that returns a single element. By default `document.body`.
47
48
  *
@@ -106,11 +107,15 @@ interface ContextProps extends CDropdownProps {
106
107
 
107
108
  export const CDropdownContext = createContext({} as ContextProps)
108
109
 
109
- export const CDropdown = forwardRef<HTMLDivElement | HTMLLIElement, CDropdownProps>(
110
+ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps> = forwardRef<
111
+ HTMLDivElement | HTMLLIElement,
112
+ CDropdownProps
113
+ >(
110
114
  (
111
115
  {
112
116
  children,
113
117
  alignment,
118
+ as = 'div',
114
119
  autoClose = true,
115
120
  className,
116
121
  container,
@@ -123,7 +128,6 @@ export const CDropdown = forwardRef<HTMLDivElement | HTMLLIElement, CDropdownPro
123
128
  popper = true,
124
129
  portal = false,
125
130
  variant = 'btn-group',
126
- component = 'div',
127
131
  visible = false,
128
132
  ...rest
129
133
  },
@@ -137,7 +141,7 @@ export const CDropdown = forwardRef<HTMLDivElement | HTMLLIElement, CDropdownPro
137
141
  const [_visible, setVisible] = useState(visible)
138
142
  const { initPopper, destroyPopper } = usePopper()
139
143
 
140
- const Component = variant === 'nav-item' ? 'li' : component
144
+ const Component = variant === 'nav-item' ? 'li' : as
141
145
 
142
146
  // Disable popper if responsive aligment is set.
143
147
  if (typeof alignment === 'object') {
@@ -279,13 +283,13 @@ CDropdown.propTypes = {
279
283
  PropTypes.shape({ xl: alignmentDirection.isRequired }),
280
284
  PropTypes.shape({ xxl: alignmentDirection.isRequired }),
281
285
  ]),
286
+ as: PropTypes.elementType,
282
287
  autoClose: PropTypes.oneOfType([
283
288
  PropTypes.bool,
284
289
  PropTypes.oneOf<'inside' | 'outside'>(['inside', 'outside']),
285
290
  ]),
286
291
  children: PropTypes.node,
287
292
  className: PropTypes.string,
288
- component: PropTypes.elementType,
289
293
  dark: PropTypes.bool,
290
294
  direction: PropTypes.oneOf(['center', 'dropup', 'dropup-center', 'dropend', 'dropstart']),
291
295
  offset: PropTypes.any, // TODO: find good proptype
@@ -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 CDropdownHeaderProps extends HTMLAttributes<HTMLHeadingElement> {
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 CDropdownHeader = forwardRef<HTMLHeadingElement, CDropdownHeaderProps>(
17
- ({ children, className, component: Component = 'h6', ...rest }, ref) => {
18
- return (
19
- <Component className={classNames('dropdown-header', className)} {...rest} ref={ref}>
20
- {children}
21
- </Component>
22
- )
23
- },
24
- )
18
+ export const CDropdownHeader: PolymorphicRefForwardingComponent<'h6', CDropdownHeaderProps> =
19
+ forwardRef<HTMLHeadingElement, CDropdownHeaderProps>(
20
+ ({ children, as: Component = 'h6', className, ...rest }, ref) => {
21
+ return (
22
+ <Component className={classNames('dropdown-header', className)} {...rest} ref={ref}>
23
+ {children}
24
+ </Component>
25
+ )
26
+ },
27
+ )
25
28
 
26
29
  CDropdownHeader.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
  CDropdownHeader.displayName = 'CDropdownHeader'
@@ -1,39 +1,33 @@
1
- import React, { ElementType, forwardRef } from 'react'
1
+ import React, { forwardRef } from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import classNames from 'classnames'
4
4
 
5
5
  import { CLink, CLinkProps } from '../link/CLink'
6
6
 
7
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
8
+
7
9
  export interface CDropdownItemProps extends CLinkProps {
8
10
  /**
9
11
  * A string of all className you want applied to the component.
10
12
  */
11
13
  className?: string
12
- /**
13
- * Component used for the root node. Either a string to use a HTML element or a component.
14
- */
15
- component?: string | ElementType
16
14
  }
17
15
 
18
- export const CDropdownItem = forwardRef<HTMLButtonElement | HTMLAnchorElement, CDropdownItemProps>(
19
- ({ children, className, component = 'a', ...rest }, ref) => {
20
- return (
21
- <CLink
22
- className={classNames('dropdown-item', className)}
23
- component={component}
24
- {...rest}
25
- ref={ref}
26
- >
27
- {children}
28
- </CLink>
29
- )
30
- },
31
- )
16
+ export const CDropdownItem: PolymorphicRefForwardingComponent<'a', CDropdownItemProps> = forwardRef<
17
+ HTMLButtonElement | HTMLAnchorElement,
18
+ CDropdownItemProps
19
+ >(({ children, as = 'a', className, ...rest }, ref) => {
20
+ return (
21
+ <CLink className={classNames('dropdown-item', className)} as={as} {...rest} ref={ref}>
22
+ {children}
23
+ </CLink>
24
+ )
25
+ })
32
26
 
33
27
  CDropdownItem.propTypes = {
28
+ as: PropTypes.elementType,
34
29
  children: PropTypes.node,
35
30
  className: PropTypes.string,
36
- component: PropTypes.elementType,
37
31
  }
38
32
 
39
33
  CDropdownItem.displayName = 'CDropdownItem'
@@ -2,19 +2,24 @@ 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 CDropdownItemPlainProps extends HTMLAttributes<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 CDropdownItemPlain = forwardRef<HTMLSpanElement, CDropdownItemPlainProps>(
17
- ({ children, className, component: Component = 'span', ...rest }, ref) => {
18
+ export const CDropdownItemPlain: PolymorphicRefForwardingComponent<
19
+ 'span',
20
+ CDropdownItemPlainProps
21
+ > = forwardRef<HTMLSpanElement, CDropdownItemPlainProps>(
22
+ ({ children, as: Component = 'span', className, ...rest }, ref) => {
18
23
  return (
19
24
  <Component className={classNames('dropdown-item-text', className)} {...rest} ref={ref}>
20
25
  {children}
@@ -24,9 +29,9 @@ export const CDropdownItemPlain = forwardRef<HTMLSpanElement, CDropdownItemPlain
24
29
  )
25
30
 
26
31
  CDropdownItemPlain.propTypes = {
32
+ as: PropTypes.elementType,
27
33
  children: PropTypes.node,
28
34
  className: PropTypes.string,
29
- component: PropTypes.elementType,
30
35
  }
31
36
 
32
37
  CDropdownItemPlain.displayName = 'CDropdownItemPlain'
@@ -5,64 +5,66 @@ import classNames from 'classnames'
5
5
  import { CDropdownContext } from './CDropdown'
6
6
  import { CConditionalPortal } from '../conditional-portal'
7
7
 
8
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
8
9
  import { useForkedRef } from '../../hooks'
9
10
 
10
11
  import { getAlignmentClassNames } from './utils'
11
12
 
12
13
  export interface CDropdownMenuProps extends HTMLAttributes<HTMLDivElement | HTMLUListElement> {
13
14
  /**
14
- * A string of all className you want applied to the base component.
15
+ * Component used for the root node. Either a string to use a HTML element or a component.
15
16
  */
16
- className?: string
17
+ as?: ElementType
17
18
  /**
18
- * Component used for the root node. Either a string to use a HTML element or a component.
19
+ * A string of all className you want applied to the base component.
19
20
  */
20
- component?: string | ElementType
21
+ className?: string
21
22
  }
22
23
 
23
- export const CDropdownMenu = forwardRef<HTMLDivElement | HTMLUListElement, CDropdownMenuProps>(
24
- ({ children, className, component: Component = 'ul', ...rest }, ref) => {
25
- const { alignment, container, dark, dropdownMenuRef, popper, portal, visible } =
26
- useContext(CDropdownContext)
24
+ export const CDropdownMenu: PolymorphicRefForwardingComponent<'ul', CDropdownMenuProps> =
25
+ forwardRef<HTMLDivElement | HTMLUListElement, CDropdownMenuProps>(
26
+ ({ children, as: Component = 'ul', className, ...rest }, ref) => {
27
+ const { alignment, container, dark, dropdownMenuRef, popper, portal, visible } =
28
+ useContext(CDropdownContext)
27
29
 
28
- const forkedRef = useForkedRef(ref, dropdownMenuRef)
30
+ const forkedRef = useForkedRef(ref, dropdownMenuRef)
29
31
 
30
- return (
31
- <CConditionalPortal container={container} portal={portal ?? false}>
32
- <Component
33
- className={classNames(
34
- 'dropdown-menu',
35
- {
36
- show: visible,
37
- },
38
- alignment && getAlignmentClassNames(alignment),
39
- className,
40
- )}
41
- ref={forkedRef}
42
- role="menu"
43
- aria-hidden={!visible}
44
- {...(!popper && { 'data-coreui-popper': 'static' })}
45
- {...(dark && { 'data-coreui-theme': 'dark' })}
46
- {...rest}
47
- >
48
- {Component === 'ul'
49
- ? React.Children.map(children, (child, index) => {
50
- if (React.isValidElement(child)) {
51
- return <li key={index}>{React.cloneElement(child)}</li>
52
- }
53
- return
54
- })
55
- : children}
56
- </Component>
57
- </CConditionalPortal>
58
- )
59
- },
60
- )
32
+ return (
33
+ <CConditionalPortal container={container} portal={portal ?? false}>
34
+ <Component
35
+ className={classNames(
36
+ 'dropdown-menu',
37
+ {
38
+ show: visible,
39
+ },
40
+ alignment && getAlignmentClassNames(alignment),
41
+ className,
42
+ )}
43
+ ref={forkedRef}
44
+ role="menu"
45
+ aria-hidden={!visible}
46
+ {...(!popper && { 'data-coreui-popper': 'static' })}
47
+ {...(dark && { 'data-coreui-theme': 'dark' })}
48
+ {...rest}
49
+ >
50
+ {Component === 'ul'
51
+ ? React.Children.map(children, (child, index) => {
52
+ if (React.isValidElement(child)) {
53
+ return <li key={index}>{React.cloneElement(child)}</li>
54
+ }
55
+ return
56
+ })
57
+ : children}
58
+ </Component>
59
+ </CConditionalPortal>
60
+ )
61
+ },
62
+ )
61
63
 
62
64
  CDropdownMenu.propTypes = {
65
+ as: PropTypes.elementType,
63
66
  children: PropTypes.node,
64
67
  className: PropTypes.string,
65
- component: PropTypes.elementType,
66
68
  }
67
69
 
68
70
  CDropdownMenu.displayName = 'CDropdownMenu'
@@ -21,7 +21,7 @@ export interface CDropdownToggleProps extends Omit<CButtonProps, 'type'> {
21
21
  /**
22
22
  * If a dropdown `variant` is set to `nav-item` then render the toggler as a link instead of a button.
23
23
  *
24
- * @since v5.0.0-rc.0
24
+ * @since v5.0.0-rc.1
25
25
  */
26
26
  navLink?: boolean
27
27
  /**
@@ -21,7 +21,7 @@ test('CDropdown customize', async () => {
21
21
  <CDropdown
22
22
  alignment={{ lg: 'start' }}
23
23
  className="bazinga"
24
- component="h3"
24
+ as="h3"
25
25
  dark={true}
26
26
  direction="dropstart"
27
27
  placement="right-end"
@@ -10,7 +10,7 @@ test('loads and displays CDropdownHeader component', async () => {
10
10
 
11
11
  test('CDropdownHeader customize', async () => {
12
12
  const { container } = render(
13
- <CDropdownHeader className="bazinga" component="h3">
13
+ <CDropdownHeader className="bazinga" as="h3">
14
14
  Test
15
15
  </CDropdownHeader>,
16
16
  )
@@ -10,7 +10,7 @@ test('loads and displays CDropdownItem component', async () => {
10
10
 
11
11
  test('CDropdownItem customize', async () => {
12
12
  const { container } = render(
13
- <CDropdownItem className="bazinga" component="div">
13
+ <CDropdownItem className="bazinga" as="div">
14
14
  Test
15
15
  </CDropdownItem>,
16
16
  )
@@ -10,7 +10,7 @@ test('loads and displays CDropdownItemPlain component', async () => {
10
10
 
11
11
  test('CDropdownItemPlain customize', async () => {
12
12
  const { container } = render(
13
- <CDropdownItemPlain className="bazinga" component="div">
13
+ <CDropdownItemPlain className="bazinga" as="div">
14
14
  Test
15
15
  </CDropdownItemPlain>,
16
16
  )
@@ -11,7 +11,7 @@ test('loads and displays CDropdownMenu component', async () => {
11
11
  test('CDropdownMenu customize', async () => {
12
12
  const { container } = render(
13
13
  <CDropdown visible={true}>
14
- <CDropdownMenu className="bazinga" component="div">
14
+ <CDropdownMenu className="bazinga" as="div">
15
15
  Test
16
16
  </CDropdownMenu>
17
17
  </CDropdown>,
@@ -8,4 +8,4 @@ export type Breakpoints =
8
8
  | { xl: Directions }
9
9
  | { xxl: Directions }
10
10
 
11
- export type Alignments = Directions | Breakpoints
11
+ export type Alignments = Directions | Breakpoints
@@ -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'