@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
@@ -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.2
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'
@@ -90,9 +90,10 @@ export const CTooltip = forwardRef<HTMLDivElement, CTooltipProps>(
90
90
  },
91
91
  ref,
92
92
  ) => {
93
- const tooltipRef = useRef(null)
93
+ const tooltipRef = useRef<HTMLDivElement>(null)
94
94
  const togglerRef = useRef(null)
95
95
  const forkedRef = useForkedRef(ref, tooltipRef)
96
+ const uID = useRef(`tooltip${Math.floor(Math.random() * 1_000_000)}`)
96
97
 
97
98
  const { initPopper, destroyPopper } = usePopper()
98
99
  const [_visible, setVisible] = useState(visible)
@@ -127,16 +128,6 @@ export const CTooltip = forwardRef<HTMLDivElement, CTooltipProps>(
127
128
  setVisible(visible)
128
129
  }, [visible])
129
130
 
130
- useEffect(() => {
131
- if (_visible && togglerRef.current && tooltipRef.current) {
132
- initPopper(togglerRef.current, tooltipRef.current, popperConfig)
133
- }
134
-
135
- return () => {
136
- destroyPopper()
137
- }
138
- }, [_visible])
139
-
140
131
  const toggleVisible = (visible: boolean) => {
141
132
  if (visible) {
142
133
  setTimeout(() => setVisible(true), _delay.show)
@@ -149,6 +140,9 @@ export const CTooltip = forwardRef<HTMLDivElement, CTooltipProps>(
149
140
  return (
150
141
  <>
151
142
  {React.cloneElement(children as React.ReactElement<any>, {
143
+ ...(_visible && {
144
+ 'aria-describedby': uID.current,
145
+ }),
152
146
  ref: togglerRef,
153
147
  ...((trigger === 'click' || trigger.includes('click')) && {
154
148
  onClick: () => toggleVisible(!_visible),
@@ -167,8 +161,22 @@ export const CTooltip = forwardRef<HTMLDivElement, CTooltipProps>(
167
161
  in={_visible}
168
162
  mountOnEnter
169
163
  nodeRef={tooltipRef}
170
- onEnter={onShow}
164
+ onEnter={() => {
165
+ if (togglerRef.current && tooltipRef.current) {
166
+ initPopper(togglerRef.current, tooltipRef.current, popperConfig)
167
+ }
168
+
169
+ onShow
170
+ }}
171
+ onEntering={() => {
172
+ if (togglerRef.current && tooltipRef.current) {
173
+ tooltipRef.current.style.display = 'initial'
174
+ }
175
+ }}
171
176
  onExit={onHide}
177
+ onExited={() => {
178
+ destroyPopper()
179
+ }}
172
180
  timeout={{
173
181
  enter: 0,
174
182
  exit: tooltipRef.current
@@ -188,8 +196,12 @@ export const CTooltip = forwardRef<HTMLDivElement, CTooltipProps>(
188
196
  },
189
197
  className,
190
198
  )}
199
+ id={uID.current}
191
200
  ref={forkedRef}
192
201
  role="tooltip"
202
+ style={{
203
+ display: 'none',
204
+ }}
193
205
  {...rest}
194
206
  >
195
207
  <div className="tooltip-arrow"></div>
@@ -0,0 +1,3 @@
1
+ import { PolymorphicRefForwardingComponent } from './polymorphicComponent'
2
+
3
+ export { PolymorphicRefForwardingComponent }
@@ -0,0 +1,21 @@
1
+ import { ComponentPropsWithRef, ElementType, PropsWithChildren, ReactNode } from 'react'
2
+
3
+ export type Omit<T, U> = Pick<T, Exclude<keyof T, keyof U>>
4
+
5
+ export type ReplaceProps<Inner extends ElementType, P> = Omit<ComponentPropsWithRef<Inner>, P> & P
6
+
7
+ export interface AsProp<As extends ElementType = ElementType> {
8
+ as?: As
9
+ }
10
+
11
+ export interface Props<As extends ElementType = ElementType> extends AsProp<As> {}
12
+
13
+ export interface PolymorphicRefForwardingComponent<TInitial extends ElementType, P = unknown> {
14
+ <As extends ElementType = TInitial>(
15
+ props: PropsWithChildren<ReplaceProps<As, Props<As> & P>>,
16
+ context?: any, // eslint-disable-line @typescript-eslint/no-explicit-any
17
+ ): ReactNode | null
18
+ propTypes?: any // eslint-disable-line @typescript-eslint/no-explicit-any
19
+ defaultProps?: Partial<P>
20
+ displayName?: string
21
+ }