@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 CNavbarNav component', async () => {
10
10
 
11
11
  test('CNavbarNav customize', async () => {
12
12
  const { container } = render(
13
- <CNavbarNav className="bazinga" component="h3">
13
+ <CNavbarNav className="bazinga" as="h3">
14
14
  Test
15
15
  </CNavbarNav>,
16
16
  )
@@ -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 COffcanvasTitleProps 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 COffcanvasTitle = forwardRef<HTMLHeadingElement, COffcanvasTitleProps>(
17
- ({ children, component: Component = 'h5', className, ...rest }, ref) => {
18
- return (
19
- <Component className={classNames('offcanvas-title', className)} {...rest} ref={ref}>
20
- {children}
21
- </Component>
22
- )
23
- },
24
- )
18
+ export const COffcanvasTitle: PolymorphicRefForwardingComponent<'h5', COffcanvasTitleProps> =
19
+ forwardRef<HTMLHeadingElement, COffcanvasTitleProps>(
20
+ ({ children, as: Component = 'h5', className, ...rest }, ref) => {
21
+ return (
22
+ <Component className={classNames('offcanvas-title', className)} {...rest} ref={ref}>
23
+ {children}
24
+ </Component>
25
+ )
26
+ },
27
+ )
25
28
 
26
29
  COffcanvasTitle.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
  COffcanvasTitle.displayName = 'COffcanvasTitle'
@@ -10,7 +10,7 @@ test('loads and displays COffcanvasTitle component', async () => {
10
10
 
11
11
  test('COffcanvasTitle customize', async () => {
12
12
  const { container } = render(
13
- <COffcanvasTitle className="bazinga" component="div">
13
+ <COffcanvasTitle className="bazinga" as="div">
14
14
  Test
15
15
  </COffcanvasTitle>,
16
16
  )
@@ -4,6 +4,8 @@ import classNames from 'classnames'
4
4
 
5
5
  import { CLink } from '../link/CLink'
6
6
 
7
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
8
+
7
9
  export interface CPaginationItemProps extends HTMLAttributes<HTMLAnchorElement> {
8
10
  /**
9
11
  * Toggle the active state for the component.
@@ -12,47 +14,48 @@ export interface CPaginationItemProps extends HTMLAttributes<HTMLAnchorElement>
12
14
  /**
13
15
  * Component used for the root node. Either a string to use a HTML element or a component.
14
16
  */
15
- component?: string | ElementType
17
+ as?: string | ElementType
16
18
  /**
17
19
  * Toggle the disabled state for the component.
18
20
  */
19
21
  disabled?: boolean
20
22
  }
21
23
 
22
- export const CPaginationItem = forwardRef<HTMLAnchorElement, CPaginationItemProps>(
23
- ({ children, className, component, ...rest }, ref) => {
24
- const Component = component ?? (rest.active ? 'span' : 'a')
24
+ export const CPaginationItem: PolymorphicRefForwardingComponent<'a', CPaginationItemProps> =
25
+ forwardRef<HTMLAnchorElement, CPaginationItemProps>(
26
+ ({ children, as, className, ...rest }, ref) => {
27
+ const Component = as ?? (rest.active ? 'span' : 'a')
25
28
 
26
- return (
27
- <li
28
- className={classNames(
29
- 'page-item',
30
- {
31
- active: rest.active,
32
- disabled: rest.disabled,
33
- },
34
- className,
35
- )}
36
- {...(rest.active && { 'aria-current': 'page' })}
37
- >
38
- {Component === 'a' ? (
39
- <CLink className="page-link" component={Component} {...rest} ref={ref}>
40
- {children}
41
- </CLink>
42
- ) : (
43
- <Component className="page-link" ref={ref}>
44
- {children}
45
- </Component>
46
- )}
47
- </li>
48
- )
49
- },
50
- )
29
+ return (
30
+ <li
31
+ className={classNames(
32
+ 'page-item',
33
+ {
34
+ active: rest.active,
35
+ disabled: rest.disabled,
36
+ },
37
+ className,
38
+ )}
39
+ {...(rest.active && { 'aria-current': 'page' })}
40
+ >
41
+ {Component === 'a' ? (
42
+ <CLink className="page-link" as={Component} {...rest} ref={ref}>
43
+ {children}
44
+ </CLink>
45
+ ) : (
46
+ <Component className="page-link" ref={ref}>
47
+ {children}
48
+ </Component>
49
+ )}
50
+ </li>
51
+ )
52
+ },
53
+ )
51
54
 
52
55
  CPaginationItem.propTypes = {
56
+ as: PropTypes.elementType,
53
57
  children: PropTypes.node,
54
58
  className: PropTypes.string,
55
- component: PropTypes.elementType,
56
59
  }
57
60
 
58
61
  CPaginationItem.displayName = 'CPaginationItem'
@@ -10,7 +10,7 @@ test('loads and displays CPaginationItem component', async () => {
10
10
 
11
11
  test('CPaginationItem customize', async () => {
12
12
  const { container } = render(
13
- <CPaginationItem className="bazinga" active={true} component="h3" disabled={true}>
13
+ <CPaginationItem className="bazinga" active={true} as="h3" disabled={true}>
14
14
  Test
15
15
  </CPaginationItem>,
16
16
  )
@@ -2,6 +2,7 @@ import React, { ElementType, forwardRef, HTMLAttributes } from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import classNames from 'classnames'
4
4
 
5
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
5
6
  import { colorPropType } from '../../props'
6
7
  import type { Colors } from '../../types'
7
8
 
@@ -10,6 +11,10 @@ export interface CPlaceholderProps extends HTMLAttributes<HTMLSpanElement> {
10
11
  * Set animation type to better convey the perception of something being actively loaded.
11
12
  */
12
13
  animation?: 'glow' | 'wave'
14
+ /**
15
+ * Component used for the root node. Either a string to use a HTML element or a component.
16
+ */
17
+ as?: ElementType
13
18
  /**
14
19
  * A string of all className you want applied to the component.
15
20
  */
@@ -20,10 +25,6 @@ export interface CPlaceholderProps extends HTMLAttributes<HTMLSpanElement> {
20
25
  * @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | string
21
26
  */
22
27
  color?: Colors
23
- /**
24
- * Component used for the root node. Either a string to use a HTML element or a component.
25
- */
26
- component?: string | ElementType
27
28
  /**
28
29
  * Size the component extra small, small, or large.
29
30
  */
@@ -63,54 +64,52 @@ const BREAKPOINTS = [
63
64
  'xs' as const,
64
65
  ]
65
66
 
66
- export const CPlaceholder = forwardRef<HTMLSpanElement, CPlaceholderProps>(
67
- (
68
- { children, animation, className, color, component: Component = 'span', size, ...rest },
69
- ref,
70
- ) => {
71
- const repsonsiveClassNames: string[] = []
67
+ export const CPlaceholder: PolymorphicRefForwardingComponent<'span', CPlaceholderProps> =
68
+ forwardRef<HTMLSpanElement, CPlaceholderProps>(
69
+ ({ children, animation, as: Component = 'span', className, color, size, ...rest }, ref) => {
70
+ const repsonsiveClassNames: string[] = []
72
71
 
73
- BREAKPOINTS.forEach((bp) => {
74
- const breakpoint = rest[bp]
75
- delete rest[bp]
72
+ BREAKPOINTS.forEach((bp) => {
73
+ const breakpoint = rest[bp]
74
+ delete rest[bp]
76
75
 
77
- const infix = bp === 'xs' ? '' : `-${bp}`
76
+ const infix = bp === 'xs' ? '' : `-${bp}`
78
77
 
79
- if (typeof breakpoint === 'number') {
80
- repsonsiveClassNames.push(`col${infix}-${breakpoint}`)
81
- }
78
+ if (typeof breakpoint === 'number') {
79
+ repsonsiveClassNames.push(`col${infix}-${breakpoint}`)
80
+ }
82
81
 
83
- if (typeof breakpoint === 'boolean') {
84
- repsonsiveClassNames.push(`col${infix}`)
85
- }
86
- })
82
+ if (typeof breakpoint === 'boolean') {
83
+ repsonsiveClassNames.push(`col${infix}`)
84
+ }
85
+ })
87
86
 
88
- return (
89
- <Component
90
- className={classNames(
91
- animation ? `placeholder-${animation}` : 'placeholder',
92
- {
93
- [`bg-${color}`]: color,
94
- [`placeholder-${size}`]: size,
95
- },
96
- repsonsiveClassNames,
97
- className,
98
- )}
99
- {...rest}
100
- ref={ref}
101
- >
102
- {children}
103
- </Component>
104
- )
105
- },
106
- )
87
+ return (
88
+ <Component
89
+ className={classNames(
90
+ animation ? `placeholder-${animation}` : 'placeholder',
91
+ {
92
+ [`bg-${color}`]: color,
93
+ [`placeholder-${size}`]: size,
94
+ },
95
+ repsonsiveClassNames,
96
+ className,
97
+ )}
98
+ {...rest}
99
+ ref={ref}
100
+ >
101
+ {children}
102
+ </Component>
103
+ )
104
+ },
105
+ )
107
106
 
108
107
  CPlaceholder.propTypes = {
109
108
  animation: PropTypes.oneOf(['glow', 'wave']),
109
+ as: PropTypes.elementType,
110
110
  children: PropTypes.node,
111
111
  className: PropTypes.string,
112
112
  color: colorPropType,
113
- component: PropTypes.elementType,
114
113
  size: PropTypes.oneOf(['xs', 'sm', 'lg']),
115
114
  }
116
115
 
@@ -1,5 +1,4 @@
1
1
  import React, { forwardRef, HTMLAttributes, ReactNode, useRef, useEffect, useState } from 'react'
2
- // import { createPortal } from 'react-dom'
3
2
  import classNames from 'classnames'
4
3
  import PropTypes from 'prop-types'
5
4
  import { Transition } from 'react-transition-group'
@@ -96,9 +95,10 @@ export const CPopover = forwardRef<HTMLDivElement, CPopoverProps>(
96
95
  },
97
96
  ref,
98
97
  ) => {
99
- const popoverRef = useRef(null)
98
+ const popoverRef = useRef<HTMLDivElement>(null)
100
99
  const togglerRef = useRef(null)
101
100
  const forkedRef = useForkedRef(ref, popoverRef)
101
+ const uID = useRef(`popover${Math.floor(Math.random() * 1_000_000)}`)
102
102
 
103
103
  const { initPopper, destroyPopper } = usePopper()
104
104
  const [_visible, setVisible] = useState(visible)
@@ -133,16 +133,6 @@ export const CPopover = forwardRef<HTMLDivElement, CPopoverProps>(
133
133
  setVisible(visible)
134
134
  }, [visible])
135
135
 
136
- useEffect(() => {
137
- if (_visible && togglerRef.current && popoverRef.current) {
138
- initPopper(togglerRef.current, popoverRef.current, popperConfig)
139
- }
140
-
141
- return () => {
142
- destroyPopper()
143
- }
144
- }, [_visible])
145
-
146
136
  const toggleVisible = (visible: boolean) => {
147
137
  if (visible) {
148
138
  setTimeout(() => setVisible(true), _delay.show)
@@ -155,6 +145,9 @@ export const CPopover = forwardRef<HTMLDivElement, CPopoverProps>(
155
145
  return (
156
146
  <>
157
147
  {React.cloneElement(children as React.ReactElement<any>, {
148
+ ...(_visible && {
149
+ 'aria-describedby': uID.current,
150
+ }),
158
151
  ref: togglerRef,
159
152
  ...((trigger === 'click' || trigger.includes('click')) && {
160
153
  onClick: () => toggleVisible(!_visible),
@@ -173,8 +166,22 @@ export const CPopover = forwardRef<HTMLDivElement, CPopoverProps>(
173
166
  in={_visible}
174
167
  mountOnEnter
175
168
  nodeRef={popoverRef}
176
- onEnter={onShow}
169
+ onEnter={() => {
170
+ if (togglerRef.current && popoverRef.current) {
171
+ initPopper(togglerRef.current, popoverRef.current, popperConfig)
172
+ }
173
+
174
+ onShow
175
+ }}
176
+ onEntering={() => {
177
+ if (togglerRef.current && popoverRef.current) {
178
+ popoverRef.current.style.display = 'initial'
179
+ }
180
+ }}
177
181
  onExit={onHide}
182
+ onExited={() => {
183
+ destroyPopper()
184
+ }}
178
185
  timeout={{
179
186
  enter: 0,
180
187
  exit: popoverRef.current
@@ -194,8 +201,12 @@ export const CPopover = forwardRef<HTMLDivElement, CPopoverProps>(
194
201
  },
195
202
  className,
196
203
  )}
204
+ id={uID.current}
197
205
  ref={forkedRef}
198
206
  role="tooltip"
207
+ style={{
208
+ display: 'none',
209
+ }}
199
210
  {...rest}
200
211
  >
201
212
  <div className="popover-arrow"></div>
@@ -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 CSidebarBrandProps extends HTMLAttributes<HTMLDivElement> {
5
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
6
+
7
+ export interface CSidebarBrandProps extends HTMLAttributes<HTMLAnchorElement | HTMLDivElement> {
8
+ /**
9
+ * Component used for the root node. Either a string to use a HTML element or a component.
10
+ *
11
+ * @since 5.0.0-rc.1
12
+ */
13
+ as?: ElementType
6
14
  /**
7
15
  * A string of all className you want applied to the component.
8
16
  */
9
17
  className?: string
10
18
  }
11
19
 
12
- export const CSidebarBrand = forwardRef<HTMLDivElement, CSidebarBrandProps>(
13
- ({ children, className, ...rest }, ref) => {
14
- return (
15
- <div className={classNames('sidebar-brand', className)} ref={ref} {...rest}>
16
- {children}
17
- </div>
18
- )
19
- },
20
- )
20
+ export const CSidebarBrand: PolymorphicRefForwardingComponent<'a', CSidebarBrandProps> = forwardRef<
21
+ HTMLAnchorElement | HTMLDivElement,
22
+ CSidebarBrandProps
23
+ >(({ children, as: Component = 'a', className, ...rest }, ref) => {
24
+ return (
25
+ <Component className={classNames('sidebar-brand', className)} ref={ref} {...rest}>
26
+ {children}
27
+ </Component>
28
+ )
29
+ })
21
30
 
22
31
  CSidebarBrand.propTypes = {
32
+ as: PropTypes.elementType,
23
33
  children: PropTypes.node,
24
34
  className: PropTypes.string,
25
35
  }
@@ -1,8 +1,24 @@
1
- import React, { createContext, forwardRef, HTMLAttributes, useState } from 'react'
1
+ import React, {
2
+ createContext,
3
+ ElementType,
4
+ forwardRef,
5
+ HTMLAttributes,
6
+ ReactElement,
7
+ ReactNode,
8
+ useState,
9
+ } from 'react'
2
10
  import PropTypes from 'prop-types'
3
11
  import classNames from 'classnames'
4
12
 
13
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
14
+
5
15
  export interface CSidebarNavProps extends HTMLAttributes<HTMLUListElement> {
16
+ /**
17
+ * Component used for the root node. Either a string to use a HTML element or a component.
18
+ *
19
+ * @since 5.0.0-rc.1
20
+ */
21
+ as?: ElementType
6
22
  /**
7
23
  * A string of all className you want applied to the component.
8
24
  */
@@ -16,33 +32,61 @@ interface ContextProps {
16
32
 
17
33
  export const CNavContext = createContext({} as ContextProps)
18
34
 
19
- export const CSidebarNav = forwardRef<HTMLUListElement, CSidebarNavProps>(
20
- ({ children, className, ...rest }, ref) => {
21
- const [visibleGroup, setVisibleGroup] = useState('')
22
- const CNavContextValues = {
23
- visibleGroup,
24
- setVisibleGroup,
35
+ const recursiveClone = (children: ReactNode, id?: string, updateId?: boolean): ReactNode => {
36
+ return React.Children.map(children, (child: ReactNode, index: number) => {
37
+ if (
38
+ !React.isValidElement(child) ||
39
+ // @ts-expect-error the `children` exist in each component. TODO: resolve
40
+ (child.type.displayName !== 'CNavGroup' &&
41
+ // @ts-expect-error the `children` exist in each component. TODO: resolve
42
+ child.type.displayName !== 'CNavLink' &&
43
+ // @ts-expect-error the `children` exist in each component. TODO: resolve
44
+ child.type.displayName !== 'CNavItem')
45
+ ) {
46
+ return child
25
47
  }
26
48
 
27
- return (
28
- <ul className={classNames('sidebar-nav', className)} ref={ref} {...rest}>
29
- <CNavContext.Provider value={CNavContextValues}>
30
- {React.Children.map(children, (child, index) => {
31
- if (React.isValidElement(child)) {
32
- return React.cloneElement(child as React.ReactElement<any>, {
33
- key: index,
34
- idx: `${index}`,
35
- })
36
- }
37
- return
38
- })}
39
- </CNavContext.Provider>
40
- </ul>
41
- )
42
- },
43
- )
49
+ const _id = id ? (updateId ? `${id}.${index}` : `${id}`) : `${index}`
50
+
51
+ if (child.props && child.props.children) {
52
+ return React.cloneElement(child as ReactElement<any>, {
53
+ idx: _id,
54
+ children: recursiveClone(
55
+ child.props.children,
56
+ _id,
57
+ // @ts-expect-error the `displayName` exist in each component. TODO: resolve
58
+ child.type.displayName === 'CNavItem' ? false : true,
59
+ ),
60
+ })
61
+ }
62
+
63
+ return React.cloneElement(child as ReactElement<any>, {
64
+ idx: _id,
65
+ })
66
+ })
67
+ }
68
+
69
+ export const CSidebarNav: PolymorphicRefForwardingComponent<'ul', CSidebarNavProps> = forwardRef<
70
+ HTMLUListElement,
71
+ CSidebarNavProps
72
+ >(({ children, as: Component = 'ul', className, ...rest }, ref) => {
73
+ const [visibleGroup, setVisibleGroup] = useState('')
74
+ const CNavContextValues = {
75
+ visibleGroup,
76
+ setVisibleGroup,
77
+ }
78
+
79
+ return (
80
+ <CNavContext.Provider value={CNavContextValues}>
81
+ <Component className={classNames('sidebar-nav', className)} ref={ref} {...rest}>
82
+ {recursiveClone(children)}
83
+ </Component>
84
+ </CNavContext.Provider>
85
+ )
86
+ })
44
87
 
45
88
  CSidebarNav.propTypes = {
89
+ as: PropTypes.elementType,
46
90
  children: PropTypes.node,
47
91
  className: PropTypes.string,
48
92
  }
@@ -2,10 +2,15 @@ import React, { ElementType, forwardRef, HTMLAttributes } from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import classNames from 'classnames'
4
4
 
5
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
5
6
  import { colorPropType } from '../../props'
6
7
  import type { Colors } from '../../types'
7
8
 
8
9
  export interface CSpinnerProps extends HTMLAttributes<HTMLDivElement | HTMLSpanElement> {
10
+ /**
11
+ * Component used for the root node. Either a string to use a HTML element or a component.
12
+ */
13
+ as?: ElementType
9
14
  /**
10
15
  * A string of all className you want applied to the component.
11
16
  */
@@ -16,10 +21,6 @@ export interface CSpinnerProps extends HTMLAttributes<HTMLDivElement | HTMLSpanE
16
21
  * @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | string
17
22
  */
18
23
  color?: Colors
19
- /**
20
- * Component used for the root node. Either a string to use a HTML element or a component.
21
- */
22
- component?: string | ElementType
23
24
  /**
24
25
  * Size the component small.
25
26
  */
@@ -34,12 +35,15 @@ export interface CSpinnerProps extends HTMLAttributes<HTMLDivElement | HTMLSpanE
34
35
  visuallyHiddenLabel?: string
35
36
  }
36
37
 
37
- export const CSpinner = forwardRef<HTMLDivElement | HTMLSpanElement, CSpinnerProps>(
38
+ export const CSpinner: PolymorphicRefForwardingComponent<'div', CSpinnerProps> = forwardRef<
39
+ HTMLDivElement | HTMLSpanElement,
40
+ CSpinnerProps
41
+ >(
38
42
  (
39
43
  {
44
+ as: Component = 'div',
40
45
  className,
41
46
  color,
42
- component: Component = 'div',
43
47
  size,
44
48
  variant = 'border',
45
49
  visuallyHiddenLabel = 'Loading...',
@@ -68,9 +72,9 @@ export const CSpinner = forwardRef<HTMLDivElement | HTMLSpanElement, CSpinnerPro
68
72
  )
69
73
 
70
74
  CSpinner.propTypes = {
75
+ as: PropTypes.string,
71
76
  className: PropTypes.string,
72
77
  color: colorPropType,
73
- component: PropTypes.string,
74
78
  size: PropTypes.oneOf(['sm']),
75
79
  variant: PropTypes.oneOf(['border', 'grow']),
76
80
  visuallyHiddenLabel: PropTypes.string,
@@ -10,7 +10,7 @@ test('loads and displays CSpinner component', async () => {
10
10
 
11
11
  test('CSpinner customize', async () => {
12
12
  const { container } = render(
13
- <CSpinner className="bazinga" color="warning" component="h3" size="sm" variant="grow">
13
+ <CSpinner className="bazinga" color="warning" as="h3" size="sm" variant="grow">
14
14
  Test
15
15
  </CSpinner>,
16
16
  )
@@ -6,17 +6,19 @@ import { CCloseButton, CCloseButtonProps } from '../close-button/CCloseButton'
6
6
 
7
7
  import { CToastContext } from './CToast'
8
8
 
9
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
10
+
9
11
  type CombineButtonProps = CCloseButtonProps & CButtonProps
10
12
 
11
- export interface CToastCloseProps extends CombineButtonProps {
13
+ export interface CToastCloseProps extends Omit<CombineButtonProps, 'as'> {
12
14
  /**
13
15
  * Component used for the root node. Either a string to use a HTML element or a component.
14
16
  */
15
- component?: string | ElementType
17
+ as?: string | ElementType
16
18
  }
17
19
 
18
- export const CToastClose = forwardRef<HTMLButtonElement, CToastCloseProps>(
19
- ({ children, component: Component, ...rest }, ref) => {
20
+ export const CToastClose: PolymorphicRefForwardingComponent<'button', CToastCloseProps> =
21
+ forwardRef<HTMLButtonElement, CToastCloseProps>(({ children, as: Component, ...rest }, ref) => {
20
22
  const { setVisible } = useContext(CToastContext)
21
23
  return Component ? (
22
24
  <Component onClick={() => setVisible(false)} {...rest} ref={ref}>
@@ -25,12 +27,11 @@ export const CToastClose = forwardRef<HTMLButtonElement, CToastCloseProps>(
25
27
  ) : (
26
28
  <CCloseButton onClick={() => setVisible(false)} {...rest} ref={ref} />
27
29
  )
28
- },
29
- )
30
+ })
30
31
 
31
32
  CToastClose.propTypes = {
32
33
  ...CCloseButton.propTypes,
33
- component: PropTypes.elementType,
34
+ as: PropTypes.elementType,
34
35
  }
35
36
 
36
37
  CToastClose.displayName = 'CToastClose'