@coreui/react 5.7.1 → 5.9.0

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 (838) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/accordion/CAccordion.js +5 -5
  3. package/dist/cjs/components/accordion/CAccordion.js.map +1 -1
  4. package/dist/cjs/components/accordion/CAccordionBody.js +4 -4
  5. package/dist/cjs/components/accordion/CAccordionBody.js.map +1 -1
  6. package/dist/cjs/components/accordion/CAccordionButton.js +4 -4
  7. package/dist/cjs/components/accordion/CAccordionButton.js.map +1 -1
  8. package/dist/cjs/components/accordion/CAccordionContext.js +1 -1
  9. package/dist/cjs/components/accordion/CAccordionContext.js.map +1 -1
  10. package/dist/cjs/components/accordion/CAccordionHeader.js +3 -3
  11. package/dist/cjs/components/accordion/CAccordionHeader.js.map +1 -1
  12. package/dist/cjs/components/accordion/CAccordionItem.js +11 -11
  13. package/dist/cjs/components/accordion/CAccordionItem.js.map +1 -1
  14. package/dist/cjs/components/accordion/CAccordionItemContext.js +1 -1
  15. package/dist/cjs/components/accordion/CAccordionItemContext.js.map +1 -1
  16. package/dist/cjs/components/alert/CAlert.js +8 -8
  17. package/dist/cjs/components/alert/CAlert.js.map +1 -1
  18. package/dist/cjs/components/alert/CAlertHeading.js +3 -3
  19. package/dist/cjs/components/alert/CAlertHeading.js.map +1 -1
  20. package/dist/cjs/components/alert/CAlertLink.js +3 -3
  21. package/dist/cjs/components/alert/CAlertLink.js.map +1 -1
  22. package/dist/cjs/components/avatar/CAvatar.js +8 -9
  23. package/dist/cjs/components/avatar/CAvatar.js.map +1 -1
  24. package/dist/cjs/components/backdrop/CBackdrop.js +6 -6
  25. package/dist/cjs/components/backdrop/CBackdrop.js.map +1 -1
  26. package/dist/cjs/components/badge/CBadge.js +13 -14
  27. package/dist/cjs/components/badge/CBadge.js.map +1 -1
  28. package/dist/cjs/components/breadcrumb/CBreadcrumb.js +3 -3
  29. package/dist/cjs/components/breadcrumb/CBreadcrumb.js.map +1 -1
  30. package/dist/cjs/components/breadcrumb/CBreadcrumbItem.js +3 -3
  31. package/dist/cjs/components/breadcrumb/CBreadcrumbItem.js.map +1 -1
  32. package/dist/cjs/components/button/CButton.js +8 -9
  33. package/dist/cjs/components/button/CButton.js.map +1 -1
  34. package/dist/cjs/components/button-group/CButtonGroup.js +3 -4
  35. package/dist/cjs/components/button-group/CButtonGroup.js.map +1 -1
  36. package/dist/cjs/components/button-group/CButtonToolbar.js +3 -3
  37. package/dist/cjs/components/button-group/CButtonToolbar.js.map +1 -1
  38. package/dist/cjs/components/callout/CCallout.js +5 -6
  39. package/dist/cjs/components/callout/CCallout.js.map +1 -1
  40. package/dist/cjs/components/card/CCard.js +7 -8
  41. package/dist/cjs/components/card/CCard.js.map +1 -1
  42. package/dist/cjs/components/card/CCardBody.js +3 -3
  43. package/dist/cjs/components/card/CCardBody.js.map +1 -1
  44. package/dist/cjs/components/card/CCardFooter.js +3 -3
  45. package/dist/cjs/components/card/CCardFooter.js.map +1 -1
  46. package/dist/cjs/components/card/CCardGroup.js +3 -3
  47. package/dist/cjs/components/card/CCardGroup.js.map +1 -1
  48. package/dist/cjs/components/card/CCardHeader.js +3 -3
  49. package/dist/cjs/components/card/CCardHeader.js.map +1 -1
  50. package/dist/cjs/components/card/CCardImage.js +3 -3
  51. package/dist/cjs/components/card/CCardImage.js.map +1 -1
  52. package/dist/cjs/components/card/CCardImageOverlay.js +3 -3
  53. package/dist/cjs/components/card/CCardImageOverlay.js.map +1 -1
  54. package/dist/cjs/components/card/CCardLink.js +3 -3
  55. package/dist/cjs/components/card/CCardLink.js.map +1 -1
  56. package/dist/cjs/components/card/CCardSubtitle.js +3 -3
  57. package/dist/cjs/components/card/CCardSubtitle.js.map +1 -1
  58. package/dist/cjs/components/card/CCardText.js +3 -3
  59. package/dist/cjs/components/card/CCardText.js.map +1 -1
  60. package/dist/cjs/components/card/CCardTitle.js +3 -3
  61. package/dist/cjs/components/card/CCardTitle.js.map +1 -1
  62. package/dist/cjs/components/carousel/CCarousel.js +41 -41
  63. package/dist/cjs/components/carousel/CCarousel.js.map +1 -1
  64. package/dist/cjs/components/carousel/CCarouselCaption.js +3 -3
  65. package/dist/cjs/components/carousel/CCarouselCaption.js.map +1 -1
  66. package/dist/cjs/components/carousel/CCarouselContext.js +1 -1
  67. package/dist/cjs/components/carousel/CCarouselContext.js.map +1 -1
  68. package/dist/cjs/components/carousel/CCarouselItem.js +21 -21
  69. package/dist/cjs/components/carousel/CCarouselItem.js.map +1 -1
  70. package/dist/cjs/components/close-button/CCloseButton.js +3 -3
  71. package/dist/cjs/components/close-button/CCloseButton.js.map +1 -1
  72. package/dist/cjs/components/collapse/CCollapse.js +16 -16
  73. package/dist/cjs/components/collapse/CCollapse.js.map +1 -1
  74. package/dist/cjs/components/conditional-portal/CConditionalPortal.js +4 -5
  75. package/dist/cjs/components/conditional-portal/CConditionalPortal.js.map +1 -1
  76. package/dist/cjs/components/dropdown/CDropdown.d.ts +41 -10
  77. package/dist/cjs/components/dropdown/CDropdown.js +131 -77
  78. package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
  79. package/dist/cjs/components/dropdown/CDropdownContext.d.ts +1 -1
  80. package/dist/cjs/components/dropdown/CDropdownContext.js +1 -1
  81. package/dist/cjs/components/dropdown/CDropdownContext.js.map +1 -1
  82. package/dist/cjs/components/dropdown/CDropdownDivider.js +3 -3
  83. package/dist/cjs/components/dropdown/CDropdownDivider.js.map +1 -1
  84. package/dist/cjs/components/dropdown/CDropdownHeader.js +3 -3
  85. package/dist/cjs/components/dropdown/CDropdownHeader.js.map +1 -1
  86. package/dist/cjs/components/dropdown/CDropdownItem.js +3 -3
  87. package/dist/cjs/components/dropdown/CDropdownItem.js.map +1 -1
  88. package/dist/cjs/components/dropdown/CDropdownItemPlain.js +3 -3
  89. package/dist/cjs/components/dropdown/CDropdownItemPlain.js.map +1 -1
  90. package/dist/cjs/components/dropdown/CDropdownMenu.js +6 -6
  91. package/dist/cjs/components/dropdown/CDropdownMenu.js.map +1 -1
  92. package/dist/cjs/components/dropdown/CDropdownToggle.d.ts +14 -3
  93. package/dist/cjs/components/dropdown/CDropdownToggle.js +20 -14
  94. package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
  95. package/dist/cjs/components/dropdown/utils.d.ts +2 -0
  96. package/dist/cjs/components/dropdown/utils.js +20 -7
  97. package/dist/cjs/components/dropdown/utils.js.map +1 -1
  98. package/dist/cjs/components/focus-trap/CFocusTrap.d.ts +59 -0
  99. package/dist/cjs/components/focus-trap/CFocusTrap.js +162 -0
  100. package/dist/cjs/components/focus-trap/CFocusTrap.js.map +1 -0
  101. package/dist/cjs/components/focus-trap/index.d.ts +2 -0
  102. package/dist/cjs/components/focus-trap/utils.d.ts +36 -0
  103. package/dist/cjs/components/focus-trap/utils.js +108 -0
  104. package/dist/cjs/components/focus-trap/utils.js.map +1 -0
  105. package/dist/cjs/components/footer/CFooter.js +3 -4
  106. package/dist/cjs/components/footer/CFooter.js.map +1 -1
  107. package/dist/cjs/components/form/CForm.js +3 -3
  108. package/dist/cjs/components/form/CForm.js.map +1 -1
  109. package/dist/cjs/components/form/CFormCheck.js +16 -19
  110. package/dist/cjs/components/form/CFormCheck.js.map +1 -1
  111. package/dist/cjs/components/form/CFormControlValidation.js +2 -4
  112. package/dist/cjs/components/form/CFormControlValidation.js.map +1 -1
  113. package/dist/cjs/components/form/CFormControlWrapper.js +3 -5
  114. package/dist/cjs/components/form/CFormControlWrapper.js.map +1 -1
  115. package/dist/cjs/components/form/CFormFeedback.js +6 -7
  116. package/dist/cjs/components/form/CFormFeedback.js.map +1 -1
  117. package/dist/cjs/components/form/CFormFloating.js +3 -3
  118. package/dist/cjs/components/form/CFormFloating.js.map +1 -1
  119. package/dist/cjs/components/form/CFormInput.js +13 -14
  120. package/dist/cjs/components/form/CFormInput.js.map +1 -1
  121. package/dist/cjs/components/form/CFormLabel.js +3 -3
  122. package/dist/cjs/components/form/CFormLabel.js.map +1 -1
  123. package/dist/cjs/components/form/CFormRange.js +3 -3
  124. package/dist/cjs/components/form/CFormRange.js.map +1 -1
  125. package/dist/cjs/components/form/CFormSelect.js +10 -11
  126. package/dist/cjs/components/form/CFormSelect.js.map +1 -1
  127. package/dist/cjs/components/form/CFormSwitch.js +10 -12
  128. package/dist/cjs/components/form/CFormSwitch.js.map +1 -1
  129. package/dist/cjs/components/form/CFormText.js +3 -3
  130. package/dist/cjs/components/form/CFormText.js.map +1 -1
  131. package/dist/cjs/components/form/CFormTextarea.js +4 -4
  132. package/dist/cjs/components/form/CFormTextarea.js.map +1 -1
  133. package/dist/cjs/components/form/CInputGroup.js +5 -6
  134. package/dist/cjs/components/form/CInputGroup.js.map +1 -1
  135. package/dist/cjs/components/form/CInputGroupText.js +3 -3
  136. package/dist/cjs/components/form/CInputGroupText.js.map +1 -1
  137. package/dist/cjs/components/grid/CCol.js +16 -16
  138. package/dist/cjs/components/grid/CCol.js.map +1 -1
  139. package/dist/cjs/components/grid/CContainer.js +8 -8
  140. package/dist/cjs/components/grid/CContainer.js.map +1 -1
  141. package/dist/cjs/components/grid/CRow.js +13 -13
  142. package/dist/cjs/components/grid/CRow.js.map +1 -1
  143. package/dist/cjs/components/header/CHeader.js +3 -4
  144. package/dist/cjs/components/header/CHeader.js.map +1 -1
  145. package/dist/cjs/components/header/CHeaderBrand.js +3 -3
  146. package/dist/cjs/components/header/CHeaderBrand.js.map +1 -1
  147. package/dist/cjs/components/header/CHeaderDivider.js +3 -3
  148. package/dist/cjs/components/header/CHeaderDivider.js.map +1 -1
  149. package/dist/cjs/components/header/CHeaderNav.js +3 -3
  150. package/dist/cjs/components/header/CHeaderNav.js.map +1 -1
  151. package/dist/cjs/components/header/CHeaderText.js +3 -3
  152. package/dist/cjs/components/header/CHeaderText.js.map +1 -1
  153. package/dist/cjs/components/header/CHeaderToggler.js +3 -3
  154. package/dist/cjs/components/header/CHeaderToggler.js.map +1 -1
  155. package/dist/cjs/components/image/CImage.js +9 -10
  156. package/dist/cjs/components/image/CImage.js.map +1 -1
  157. package/dist/cjs/components/index.d.ts +1 -0
  158. package/dist/cjs/components/link/CLink.js +5 -5
  159. package/dist/cjs/components/link/CLink.js.map +1 -1
  160. package/dist/cjs/components/list-group/CListGroup.js +6 -8
  161. package/dist/cjs/components/list-group/CListGroup.js.map +1 -1
  162. package/dist/cjs/components/list-group/CListGroupItem.js +13 -14
  163. package/dist/cjs/components/list-group/CListGroupItem.js.map +1 -1
  164. package/dist/cjs/components/modal/CModal.js +26 -34
  165. package/dist/cjs/components/modal/CModal.js.map +1 -1
  166. package/dist/cjs/components/modal/CModalBody.js +3 -3
  167. package/dist/cjs/components/modal/CModalBody.js.map +1 -1
  168. package/dist/cjs/components/modal/CModalContent.js +3 -3
  169. package/dist/cjs/components/modal/CModalContent.js.map +1 -1
  170. package/dist/cjs/components/modal/CModalContext.js +1 -1
  171. package/dist/cjs/components/modal/CModalContext.js.map +1 -1
  172. package/dist/cjs/components/modal/CModalDialog.js +9 -11
  173. package/dist/cjs/components/modal/CModalDialog.js.map +1 -1
  174. package/dist/cjs/components/modal/CModalFooter.js +3 -3
  175. package/dist/cjs/components/modal/CModalFooter.js.map +1 -1
  176. package/dist/cjs/components/modal/CModalHeader.js +5 -5
  177. package/dist/cjs/components/modal/CModalHeader.js.map +1 -1
  178. package/dist/cjs/components/modal/CModalTitle.js +3 -3
  179. package/dist/cjs/components/modal/CModalTitle.js.map +1 -1
  180. package/dist/cjs/components/nav/CNav.js +7 -7
  181. package/dist/cjs/components/nav/CNav.js.map +1 -1
  182. package/dist/cjs/components/nav/CNavGroup.js +24 -24
  183. package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
  184. package/dist/cjs/components/nav/CNavGroupItems.js +3 -3
  185. package/dist/cjs/components/nav/CNavGroupItems.js.map +1 -1
  186. package/dist/cjs/components/nav/CNavItem.js +3 -3
  187. package/dist/cjs/components/nav/CNavItem.js.map +1 -1
  188. package/dist/cjs/components/nav/CNavLink.js +7 -7
  189. package/dist/cjs/components/nav/CNavLink.js.map +1 -1
  190. package/dist/cjs/components/nav/CNavTitle.js +3 -3
  191. package/dist/cjs/components/nav/CNavTitle.js.map +1 -1
  192. package/dist/cjs/components/navbar/CNavbar.js +6 -7
  193. package/dist/cjs/components/navbar/CNavbar.js.map +1 -1
  194. package/dist/cjs/components/navbar/CNavbarBrand.js +4 -4
  195. package/dist/cjs/components/navbar/CNavbarBrand.js.map +1 -1
  196. package/dist/cjs/components/navbar/CNavbarNav.js +3 -3
  197. package/dist/cjs/components/navbar/CNavbarNav.js.map +1 -1
  198. package/dist/cjs/components/navbar/CNavbarText.js +3 -3
  199. package/dist/cjs/components/navbar/CNavbarText.js.map +1 -1
  200. package/dist/cjs/components/navbar/CNavbarToggler.js +3 -3
  201. package/dist/cjs/components/navbar/CNavbarToggler.js.map +1 -1
  202. package/dist/cjs/components/offcanvas/COffcanvas.js +20 -21
  203. package/dist/cjs/components/offcanvas/COffcanvas.js.map +1 -1
  204. package/dist/cjs/components/offcanvas/COffcanvasBody.js +3 -3
  205. package/dist/cjs/components/offcanvas/COffcanvasBody.js.map +1 -1
  206. package/dist/cjs/components/offcanvas/COffcanvasHeader.js +3 -3
  207. package/dist/cjs/components/offcanvas/COffcanvasHeader.js.map +1 -1
  208. package/dist/cjs/components/offcanvas/COffcanvasTitle.js +3 -3
  209. package/dist/cjs/components/offcanvas/COffcanvasTitle.js.map +1 -1
  210. package/dist/cjs/components/pagination/CPagination.js +7 -8
  211. package/dist/cjs/components/pagination/CPagination.js.map +1 -1
  212. package/dist/cjs/components/pagination/CPaginationItem.js +5 -5
  213. package/dist/cjs/components/pagination/CPaginationItem.js.map +1 -1
  214. package/dist/cjs/components/placeholder/CPlaceholder.js +13 -14
  215. package/dist/cjs/components/placeholder/CPlaceholder.js.map +1 -1
  216. package/dist/cjs/components/popover/CPopover.js +29 -29
  217. package/dist/cjs/components/popover/CPopover.js.map +1 -1
  218. package/dist/cjs/components/progress/CProgress.js +8 -8
  219. package/dist/cjs/components/progress/CProgress.js.map +1 -1
  220. package/dist/cjs/components/progress/CProgressBar.js +8 -9
  221. package/dist/cjs/components/progress/CProgressBar.js.map +1 -1
  222. package/dist/cjs/components/progress/CProgressStacked.js +3 -3
  223. package/dist/cjs/components/progress/CProgressStacked.js.map +1 -1
  224. package/dist/cjs/components/progress/CProgressStackedContext.js +1 -1
  225. package/dist/cjs/components/progress/CProgressStackedContext.js.map +1 -1
  226. package/dist/cjs/components/sidebar/CSidebar.js +34 -37
  227. package/dist/cjs/components/sidebar/CSidebar.js.map +1 -1
  228. package/dist/cjs/components/sidebar/CSidebarBrand.js +3 -3
  229. package/dist/cjs/components/sidebar/CSidebarBrand.js.map +1 -1
  230. package/dist/cjs/components/sidebar/CSidebarFooter.js +3 -3
  231. package/dist/cjs/components/sidebar/CSidebarFooter.js.map +1 -1
  232. package/dist/cjs/components/sidebar/CSidebarHeader.js +3 -3
  233. package/dist/cjs/components/sidebar/CSidebarHeader.js.map +1 -1
  234. package/dist/cjs/components/sidebar/CSidebarNav.js +14 -14
  235. package/dist/cjs/components/sidebar/CSidebarNav.js.map +1 -1
  236. package/dist/cjs/components/sidebar/CSidebarNavContext.js +1 -1
  237. package/dist/cjs/components/sidebar/CSidebarNavContext.js.map +1 -1
  238. package/dist/cjs/components/sidebar/CSidebarToggler.js +3 -3
  239. package/dist/cjs/components/sidebar/CSidebarToggler.js.map +1 -1
  240. package/dist/cjs/components/spinner/CSpinner.js +6 -7
  241. package/dist/cjs/components/spinner/CSpinner.js.map +1 -1
  242. package/dist/cjs/components/table/CTable.js +25 -26
  243. package/dist/cjs/components/table/CTable.js.map +1 -1
  244. package/dist/cjs/components/table/CTableBody.js +5 -6
  245. package/dist/cjs/components/table/CTableBody.js.map +1 -1
  246. package/dist/cjs/components/table/CTableCaption.js +3 -3
  247. package/dist/cjs/components/table/CTableCaption.js.map +1 -1
  248. package/dist/cjs/components/table/CTableDataCell.js +8 -9
  249. package/dist/cjs/components/table/CTableDataCell.js.map +1 -1
  250. package/dist/cjs/components/table/CTableFoot.js +5 -6
  251. package/dist/cjs/components/table/CTableFoot.js.map +1 -1
  252. package/dist/cjs/components/table/CTableHead.js +5 -6
  253. package/dist/cjs/components/table/CTableHead.js.map +1 -1
  254. package/dist/cjs/components/table/CTableHeaderCell.js +5 -6
  255. package/dist/cjs/components/table/CTableHeaderCell.js.map +1 -1
  256. package/dist/cjs/components/table/CTableResponsiveWrapper.js +3 -3
  257. package/dist/cjs/components/table/CTableResponsiveWrapper.js.map +1 -1
  258. package/dist/cjs/components/table/CTableRow.js +7 -8
  259. package/dist/cjs/components/table/CTableRow.js.map +1 -1
  260. package/dist/cjs/components/table/utils.js +9 -13
  261. package/dist/cjs/components/table/utils.js.map +1 -1
  262. package/dist/cjs/components/tabs/CTab.js +6 -6
  263. package/dist/cjs/components/tabs/CTab.js.map +1 -1
  264. package/dist/cjs/components/tabs/CTabContent.js +3 -3
  265. package/dist/cjs/components/tabs/CTabContent.js.map +1 -1
  266. package/dist/cjs/components/tabs/CTabList.js +13 -13
  267. package/dist/cjs/components/tabs/CTabList.js.map +1 -1
  268. package/dist/cjs/components/tabs/CTabPane.js +6 -6
  269. package/dist/cjs/components/tabs/CTabPane.js.map +1 -1
  270. package/dist/cjs/components/tabs/CTabPanel.js +10 -10
  271. package/dist/cjs/components/tabs/CTabPanel.js.map +1 -1
  272. package/dist/cjs/components/tabs/CTabs.js +7 -8
  273. package/dist/cjs/components/tabs/CTabs.js.map +1 -1
  274. package/dist/cjs/components/tabs/CTabsContext.js +1 -1
  275. package/dist/cjs/components/tabs/CTabsContext.js.map +1 -1
  276. package/dist/cjs/components/toast/CToast.js +21 -25
  277. package/dist/cjs/components/toast/CToast.js.map +1 -1
  278. package/dist/cjs/components/toast/CToastBody.js +3 -3
  279. package/dist/cjs/components/toast/CToastBody.js.map +1 -1
  280. package/dist/cjs/components/toast/CToastClose.js +5 -5
  281. package/dist/cjs/components/toast/CToastClose.js.map +1 -1
  282. package/dist/cjs/components/toast/CToastContext.js +1 -1
  283. package/dist/cjs/components/toast/CToastContext.js.map +1 -1
  284. package/dist/cjs/components/toast/CToastHeader.js +3 -3
  285. package/dist/cjs/components/toast/CToastHeader.js.map +1 -1
  286. package/dist/cjs/components/toast/CToaster.js +12 -13
  287. package/dist/cjs/components/toast/CToaster.js.map +1 -1
  288. package/dist/cjs/components/tooltip/CTooltip.js +30 -30
  289. package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
  290. package/dist/cjs/components/widgets/CWidgetStatsA.js +3 -4
  291. package/dist/cjs/components/widgets/CWidgetStatsA.js.map +1 -1
  292. package/dist/cjs/components/widgets/CWidgetStatsB.js +4 -4
  293. package/dist/cjs/components/widgets/CWidgetStatsB.js.map +1 -1
  294. package/dist/cjs/components/widgets/CWidgetStatsC.js +4 -4
  295. package/dist/cjs/components/widgets/CWidgetStatsC.js.map +1 -1
  296. package/dist/cjs/components/widgets/CWidgetStatsD.js +7 -8
  297. package/dist/cjs/components/widgets/CWidgetStatsD.js.map +1 -1
  298. package/dist/cjs/components/widgets/CWidgetStatsE.js +3 -3
  299. package/dist/cjs/components/widgets/CWidgetStatsE.js.map +1 -1
  300. package/dist/cjs/components/widgets/CWidgetStatsF.js +6 -6
  301. package/dist/cjs/components/widgets/CWidgetStatsF.js.map +1 -1
  302. package/dist/cjs/hooks/useClipboard.js +21 -33
  303. package/dist/cjs/hooks/useClipboard.js.map +1 -1
  304. package/dist/cjs/hooks/useColorModes.js +15 -20
  305. package/dist/cjs/hooks/useColorModes.js.map +1 -1
  306. package/dist/cjs/hooks/useForkedRef.js +6 -10
  307. package/dist/cjs/hooks/useForkedRef.js.map +1 -1
  308. package/dist/cjs/hooks/usePopper.js +11 -11
  309. package/dist/cjs/hooks/usePopper.js.map +1 -1
  310. package/dist/cjs/index.js +2 -0
  311. package/dist/cjs/index.js.map +1 -1
  312. package/dist/cjs/node_modules/tslib/tslib.es6.js +0 -51
  313. package/dist/cjs/node_modules/tslib/tslib.es6.js.map +1 -1
  314. package/dist/cjs/props.js +6 -6
  315. package/dist/cjs/props.js.map +1 -1
  316. package/dist/cjs/utils/executeAfterTransition.js +8 -10
  317. package/dist/cjs/utils/executeAfterTransition.js.map +1 -1
  318. package/dist/cjs/utils/getNextActiveElement.js +3 -3
  319. package/dist/cjs/utils/getNextActiveElement.js.map +1 -1
  320. package/dist/cjs/utils/getRTLPlacement.js +1 -1
  321. package/dist/cjs/utils/getRTLPlacement.js.map +1 -1
  322. package/dist/cjs/utils/getTransitionDurationFromElement.js +4 -4
  323. package/dist/cjs/utils/getTransitionDurationFromElement.js.map +1 -1
  324. package/dist/cjs/utils/isInViewport.js +2 -2
  325. package/dist/cjs/utils/isInViewport.js.map +1 -1
  326. package/dist/cjs/utils/isRTL.js +1 -1
  327. package/dist/cjs/utils/isRTL.js.map +1 -1
  328. package/dist/esm/components/accordion/CAccordion.js +6 -6
  329. package/dist/esm/components/accordion/CAccordion.js.map +1 -1
  330. package/dist/esm/components/accordion/CAccordionBody.js +5 -5
  331. package/dist/esm/components/accordion/CAccordionBody.js.map +1 -1
  332. package/dist/esm/components/accordion/CAccordionButton.js +5 -5
  333. package/dist/esm/components/accordion/CAccordionButton.js.map +1 -1
  334. package/dist/esm/components/accordion/CAccordionContext.js +1 -1
  335. package/dist/esm/components/accordion/CAccordionContext.js.map +1 -1
  336. package/dist/esm/components/accordion/CAccordionHeader.js +4 -4
  337. package/dist/esm/components/accordion/CAccordionHeader.js.map +1 -1
  338. package/dist/esm/components/accordion/CAccordionItem.js +12 -12
  339. package/dist/esm/components/accordion/CAccordionItem.js.map +1 -1
  340. package/dist/esm/components/accordion/CAccordionItemContext.js +1 -1
  341. package/dist/esm/components/accordion/CAccordionItemContext.js.map +1 -1
  342. package/dist/esm/components/alert/CAlert.js +9 -9
  343. package/dist/esm/components/alert/CAlert.js.map +1 -1
  344. package/dist/esm/components/alert/CAlertHeading.js +4 -4
  345. package/dist/esm/components/alert/CAlertHeading.js.map +1 -1
  346. package/dist/esm/components/alert/CAlertLink.js +4 -4
  347. package/dist/esm/components/alert/CAlertLink.js.map +1 -1
  348. package/dist/esm/components/avatar/CAvatar.js +9 -10
  349. package/dist/esm/components/avatar/CAvatar.js.map +1 -1
  350. package/dist/esm/components/backdrop/CBackdrop.js +7 -7
  351. package/dist/esm/components/backdrop/CBackdrop.js.map +1 -1
  352. package/dist/esm/components/badge/CBadge.js +14 -15
  353. package/dist/esm/components/badge/CBadge.js.map +1 -1
  354. package/dist/esm/components/breadcrumb/CBreadcrumb.js +4 -4
  355. package/dist/esm/components/breadcrumb/CBreadcrumb.js.map +1 -1
  356. package/dist/esm/components/breadcrumb/CBreadcrumbItem.js +4 -4
  357. package/dist/esm/components/breadcrumb/CBreadcrumbItem.js.map +1 -1
  358. package/dist/esm/components/button/CButton.js +9 -10
  359. package/dist/esm/components/button/CButton.js.map +1 -1
  360. package/dist/esm/components/button-group/CButtonGroup.js +4 -5
  361. package/dist/esm/components/button-group/CButtonGroup.js.map +1 -1
  362. package/dist/esm/components/button-group/CButtonToolbar.js +4 -4
  363. package/dist/esm/components/button-group/CButtonToolbar.js.map +1 -1
  364. package/dist/esm/components/callout/CCallout.js +6 -7
  365. package/dist/esm/components/callout/CCallout.js.map +1 -1
  366. package/dist/esm/components/card/CCard.js +8 -9
  367. package/dist/esm/components/card/CCard.js.map +1 -1
  368. package/dist/esm/components/card/CCardBody.js +4 -4
  369. package/dist/esm/components/card/CCardBody.js.map +1 -1
  370. package/dist/esm/components/card/CCardFooter.js +4 -4
  371. package/dist/esm/components/card/CCardFooter.js.map +1 -1
  372. package/dist/esm/components/card/CCardGroup.js +4 -4
  373. package/dist/esm/components/card/CCardGroup.js.map +1 -1
  374. package/dist/esm/components/card/CCardHeader.js +4 -4
  375. package/dist/esm/components/card/CCardHeader.js.map +1 -1
  376. package/dist/esm/components/card/CCardImage.js +4 -4
  377. package/dist/esm/components/card/CCardImage.js.map +1 -1
  378. package/dist/esm/components/card/CCardImageOverlay.js +4 -4
  379. package/dist/esm/components/card/CCardImageOverlay.js.map +1 -1
  380. package/dist/esm/components/card/CCardLink.js +4 -4
  381. package/dist/esm/components/card/CCardLink.js.map +1 -1
  382. package/dist/esm/components/card/CCardSubtitle.js +4 -4
  383. package/dist/esm/components/card/CCardSubtitle.js.map +1 -1
  384. package/dist/esm/components/card/CCardText.js +4 -4
  385. package/dist/esm/components/card/CCardText.js.map +1 -1
  386. package/dist/esm/components/card/CCardTitle.js +4 -4
  387. package/dist/esm/components/card/CCardTitle.js.map +1 -1
  388. package/dist/esm/components/carousel/CCarousel.js +42 -42
  389. package/dist/esm/components/carousel/CCarousel.js.map +1 -1
  390. package/dist/esm/components/carousel/CCarouselCaption.js +4 -4
  391. package/dist/esm/components/carousel/CCarouselCaption.js.map +1 -1
  392. package/dist/esm/components/carousel/CCarouselContext.js +1 -1
  393. package/dist/esm/components/carousel/CCarouselContext.js.map +1 -1
  394. package/dist/esm/components/carousel/CCarouselItem.js +22 -22
  395. package/dist/esm/components/carousel/CCarouselItem.js.map +1 -1
  396. package/dist/esm/components/close-button/CCloseButton.js +4 -4
  397. package/dist/esm/components/close-button/CCloseButton.js.map +1 -1
  398. package/dist/esm/components/collapse/CCollapse.js +17 -17
  399. package/dist/esm/components/collapse/CCollapse.js.map +1 -1
  400. package/dist/esm/components/conditional-portal/CConditionalPortal.js +4 -5
  401. package/dist/esm/components/conditional-portal/CConditionalPortal.js.map +1 -1
  402. package/dist/esm/components/dropdown/CDropdown.d.ts +41 -10
  403. package/dist/esm/components/dropdown/CDropdown.js +133 -79
  404. package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
  405. package/dist/esm/components/dropdown/CDropdownContext.d.ts +1 -1
  406. package/dist/esm/components/dropdown/CDropdownContext.js +1 -1
  407. package/dist/esm/components/dropdown/CDropdownContext.js.map +1 -1
  408. package/dist/esm/components/dropdown/CDropdownDivider.js +4 -4
  409. package/dist/esm/components/dropdown/CDropdownDivider.js.map +1 -1
  410. package/dist/esm/components/dropdown/CDropdownHeader.js +4 -4
  411. package/dist/esm/components/dropdown/CDropdownHeader.js.map +1 -1
  412. package/dist/esm/components/dropdown/CDropdownItem.js +4 -4
  413. package/dist/esm/components/dropdown/CDropdownItem.js.map +1 -1
  414. package/dist/esm/components/dropdown/CDropdownItemPlain.js +4 -4
  415. package/dist/esm/components/dropdown/CDropdownItemPlain.js.map +1 -1
  416. package/dist/esm/components/dropdown/CDropdownMenu.js +7 -7
  417. package/dist/esm/components/dropdown/CDropdownMenu.js.map +1 -1
  418. package/dist/esm/components/dropdown/CDropdownToggle.d.ts +14 -3
  419. package/dist/esm/components/dropdown/CDropdownToggle.js +21 -15
  420. package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
  421. package/dist/esm/components/dropdown/utils.d.ts +2 -0
  422. package/dist/esm/components/dropdown/utils.js +20 -8
  423. package/dist/esm/components/dropdown/utils.js.map +1 -1
  424. package/dist/esm/components/focus-trap/CFocusTrap.d.ts +59 -0
  425. package/dist/esm/components/focus-trap/CFocusTrap.js +160 -0
  426. package/dist/esm/components/focus-trap/CFocusTrap.js.map +1 -0
  427. package/dist/esm/components/focus-trap/index.d.ts +2 -0
  428. package/dist/esm/components/focus-trap/utils.d.ts +36 -0
  429. package/dist/esm/components/focus-trap/utils.js +102 -0
  430. package/dist/esm/components/focus-trap/utils.js.map +1 -0
  431. package/dist/esm/components/footer/CFooter.js +4 -5
  432. package/dist/esm/components/footer/CFooter.js.map +1 -1
  433. package/dist/esm/components/form/CForm.js +4 -4
  434. package/dist/esm/components/form/CForm.js.map +1 -1
  435. package/dist/esm/components/form/CFormCheck.js +17 -20
  436. package/dist/esm/components/form/CFormCheck.js.map +1 -1
  437. package/dist/esm/components/form/CFormControlValidation.js +2 -4
  438. package/dist/esm/components/form/CFormControlValidation.js.map +1 -1
  439. package/dist/esm/components/form/CFormControlWrapper.js +3 -5
  440. package/dist/esm/components/form/CFormControlWrapper.js.map +1 -1
  441. package/dist/esm/components/form/CFormFeedback.js +7 -8
  442. package/dist/esm/components/form/CFormFeedback.js.map +1 -1
  443. package/dist/esm/components/form/CFormFloating.js +4 -4
  444. package/dist/esm/components/form/CFormFloating.js.map +1 -1
  445. package/dist/esm/components/form/CFormInput.js +14 -15
  446. package/dist/esm/components/form/CFormInput.js.map +1 -1
  447. package/dist/esm/components/form/CFormLabel.js +4 -4
  448. package/dist/esm/components/form/CFormLabel.js.map +1 -1
  449. package/dist/esm/components/form/CFormRange.js +4 -4
  450. package/dist/esm/components/form/CFormRange.js.map +1 -1
  451. package/dist/esm/components/form/CFormSelect.js +11 -12
  452. package/dist/esm/components/form/CFormSelect.js.map +1 -1
  453. package/dist/esm/components/form/CFormSwitch.js +11 -13
  454. package/dist/esm/components/form/CFormSwitch.js.map +1 -1
  455. package/dist/esm/components/form/CFormText.js +4 -4
  456. package/dist/esm/components/form/CFormText.js.map +1 -1
  457. package/dist/esm/components/form/CFormTextarea.js +5 -5
  458. package/dist/esm/components/form/CFormTextarea.js.map +1 -1
  459. package/dist/esm/components/form/CInputGroup.js +6 -7
  460. package/dist/esm/components/form/CInputGroup.js.map +1 -1
  461. package/dist/esm/components/form/CInputGroupText.js +4 -4
  462. package/dist/esm/components/form/CInputGroupText.js.map +1 -1
  463. package/dist/esm/components/grid/CCol.js +17 -17
  464. package/dist/esm/components/grid/CCol.js.map +1 -1
  465. package/dist/esm/components/grid/CContainer.js +9 -9
  466. package/dist/esm/components/grid/CContainer.js.map +1 -1
  467. package/dist/esm/components/grid/CRow.js +14 -14
  468. package/dist/esm/components/grid/CRow.js.map +1 -1
  469. package/dist/esm/components/header/CHeader.js +4 -5
  470. package/dist/esm/components/header/CHeader.js.map +1 -1
  471. package/dist/esm/components/header/CHeaderBrand.js +4 -4
  472. package/dist/esm/components/header/CHeaderBrand.js.map +1 -1
  473. package/dist/esm/components/header/CHeaderDivider.js +4 -4
  474. package/dist/esm/components/header/CHeaderDivider.js.map +1 -1
  475. package/dist/esm/components/header/CHeaderNav.js +4 -4
  476. package/dist/esm/components/header/CHeaderNav.js.map +1 -1
  477. package/dist/esm/components/header/CHeaderText.js +4 -4
  478. package/dist/esm/components/header/CHeaderText.js.map +1 -1
  479. package/dist/esm/components/header/CHeaderToggler.js +4 -4
  480. package/dist/esm/components/header/CHeaderToggler.js.map +1 -1
  481. package/dist/esm/components/image/CImage.js +10 -11
  482. package/dist/esm/components/image/CImage.js.map +1 -1
  483. package/dist/esm/components/index.d.ts +1 -0
  484. package/dist/esm/components/link/CLink.js +6 -6
  485. package/dist/esm/components/link/CLink.js.map +1 -1
  486. package/dist/esm/components/list-group/CListGroup.js +7 -9
  487. package/dist/esm/components/list-group/CListGroup.js.map +1 -1
  488. package/dist/esm/components/list-group/CListGroupItem.js +14 -15
  489. package/dist/esm/components/list-group/CListGroupItem.js.map +1 -1
  490. package/dist/esm/components/modal/CModal.js +27 -35
  491. package/dist/esm/components/modal/CModal.js.map +1 -1
  492. package/dist/esm/components/modal/CModalBody.js +4 -4
  493. package/dist/esm/components/modal/CModalBody.js.map +1 -1
  494. package/dist/esm/components/modal/CModalContent.js +4 -4
  495. package/dist/esm/components/modal/CModalContent.js.map +1 -1
  496. package/dist/esm/components/modal/CModalContext.js +1 -1
  497. package/dist/esm/components/modal/CModalContext.js.map +1 -1
  498. package/dist/esm/components/modal/CModalDialog.js +10 -12
  499. package/dist/esm/components/modal/CModalDialog.js.map +1 -1
  500. package/dist/esm/components/modal/CModalFooter.js +4 -4
  501. package/dist/esm/components/modal/CModalFooter.js.map +1 -1
  502. package/dist/esm/components/modal/CModalHeader.js +6 -6
  503. package/dist/esm/components/modal/CModalHeader.js.map +1 -1
  504. package/dist/esm/components/modal/CModalTitle.js +4 -4
  505. package/dist/esm/components/modal/CModalTitle.js.map +1 -1
  506. package/dist/esm/components/nav/CNav.js +8 -8
  507. package/dist/esm/components/nav/CNav.js.map +1 -1
  508. package/dist/esm/components/nav/CNavGroup.js +25 -25
  509. package/dist/esm/components/nav/CNavGroup.js.map +1 -1
  510. package/dist/esm/components/nav/CNavGroupItems.js +4 -4
  511. package/dist/esm/components/nav/CNavGroupItems.js.map +1 -1
  512. package/dist/esm/components/nav/CNavItem.js +4 -4
  513. package/dist/esm/components/nav/CNavItem.js.map +1 -1
  514. package/dist/esm/components/nav/CNavLink.js +8 -8
  515. package/dist/esm/components/nav/CNavLink.js.map +1 -1
  516. package/dist/esm/components/nav/CNavTitle.js +4 -4
  517. package/dist/esm/components/nav/CNavTitle.js.map +1 -1
  518. package/dist/esm/components/navbar/CNavbar.js +7 -8
  519. package/dist/esm/components/navbar/CNavbar.js.map +1 -1
  520. package/dist/esm/components/navbar/CNavbarBrand.js +5 -5
  521. package/dist/esm/components/navbar/CNavbarBrand.js.map +1 -1
  522. package/dist/esm/components/navbar/CNavbarNav.js +4 -4
  523. package/dist/esm/components/navbar/CNavbarNav.js.map +1 -1
  524. package/dist/esm/components/navbar/CNavbarText.js +4 -4
  525. package/dist/esm/components/navbar/CNavbarText.js.map +1 -1
  526. package/dist/esm/components/navbar/CNavbarToggler.js +4 -4
  527. package/dist/esm/components/navbar/CNavbarToggler.js.map +1 -1
  528. package/dist/esm/components/offcanvas/COffcanvas.js +21 -22
  529. package/dist/esm/components/offcanvas/COffcanvas.js.map +1 -1
  530. package/dist/esm/components/offcanvas/COffcanvasBody.js +4 -4
  531. package/dist/esm/components/offcanvas/COffcanvasBody.js.map +1 -1
  532. package/dist/esm/components/offcanvas/COffcanvasHeader.js +4 -4
  533. package/dist/esm/components/offcanvas/COffcanvasHeader.js.map +1 -1
  534. package/dist/esm/components/offcanvas/COffcanvasTitle.js +4 -4
  535. package/dist/esm/components/offcanvas/COffcanvasTitle.js.map +1 -1
  536. package/dist/esm/components/pagination/CPagination.js +8 -9
  537. package/dist/esm/components/pagination/CPagination.js.map +1 -1
  538. package/dist/esm/components/pagination/CPaginationItem.js +6 -6
  539. package/dist/esm/components/pagination/CPaginationItem.js.map +1 -1
  540. package/dist/esm/components/placeholder/CPlaceholder.js +14 -15
  541. package/dist/esm/components/placeholder/CPlaceholder.js.map +1 -1
  542. package/dist/esm/components/popover/CPopover.js +30 -30
  543. package/dist/esm/components/popover/CPopover.js.map +1 -1
  544. package/dist/esm/components/progress/CProgress.js +9 -9
  545. package/dist/esm/components/progress/CProgress.js.map +1 -1
  546. package/dist/esm/components/progress/CProgressBar.js +9 -10
  547. package/dist/esm/components/progress/CProgressBar.js.map +1 -1
  548. package/dist/esm/components/progress/CProgressStacked.js +4 -4
  549. package/dist/esm/components/progress/CProgressStacked.js.map +1 -1
  550. package/dist/esm/components/progress/CProgressStackedContext.js +1 -1
  551. package/dist/esm/components/progress/CProgressStackedContext.js.map +1 -1
  552. package/dist/esm/components/sidebar/CSidebar.js +35 -38
  553. package/dist/esm/components/sidebar/CSidebar.js.map +1 -1
  554. package/dist/esm/components/sidebar/CSidebarBrand.js +4 -4
  555. package/dist/esm/components/sidebar/CSidebarBrand.js.map +1 -1
  556. package/dist/esm/components/sidebar/CSidebarFooter.js +4 -4
  557. package/dist/esm/components/sidebar/CSidebarFooter.js.map +1 -1
  558. package/dist/esm/components/sidebar/CSidebarHeader.js +4 -4
  559. package/dist/esm/components/sidebar/CSidebarHeader.js.map +1 -1
  560. package/dist/esm/components/sidebar/CSidebarNav.js +15 -15
  561. package/dist/esm/components/sidebar/CSidebarNav.js.map +1 -1
  562. package/dist/esm/components/sidebar/CSidebarNavContext.js +1 -1
  563. package/dist/esm/components/sidebar/CSidebarNavContext.js.map +1 -1
  564. package/dist/esm/components/sidebar/CSidebarToggler.js +4 -4
  565. package/dist/esm/components/sidebar/CSidebarToggler.js.map +1 -1
  566. package/dist/esm/components/spinner/CSpinner.js +7 -8
  567. package/dist/esm/components/spinner/CSpinner.js.map +1 -1
  568. package/dist/esm/components/table/CTable.js +26 -27
  569. package/dist/esm/components/table/CTable.js.map +1 -1
  570. package/dist/esm/components/table/CTableBody.js +6 -7
  571. package/dist/esm/components/table/CTableBody.js.map +1 -1
  572. package/dist/esm/components/table/CTableCaption.js +4 -4
  573. package/dist/esm/components/table/CTableCaption.js.map +1 -1
  574. package/dist/esm/components/table/CTableDataCell.js +9 -10
  575. package/dist/esm/components/table/CTableDataCell.js.map +1 -1
  576. package/dist/esm/components/table/CTableFoot.js +6 -7
  577. package/dist/esm/components/table/CTableFoot.js.map +1 -1
  578. package/dist/esm/components/table/CTableHead.js +6 -7
  579. package/dist/esm/components/table/CTableHead.js.map +1 -1
  580. package/dist/esm/components/table/CTableHeaderCell.js +6 -7
  581. package/dist/esm/components/table/CTableHeaderCell.js.map +1 -1
  582. package/dist/esm/components/table/CTableResponsiveWrapper.js +4 -4
  583. package/dist/esm/components/table/CTableResponsiveWrapper.js.map +1 -1
  584. package/dist/esm/components/table/CTableRow.js +8 -9
  585. package/dist/esm/components/table/CTableRow.js.map +1 -1
  586. package/dist/esm/components/table/utils.js +9 -13
  587. package/dist/esm/components/table/utils.js.map +1 -1
  588. package/dist/esm/components/tabs/CTab.js +7 -7
  589. package/dist/esm/components/tabs/CTab.js.map +1 -1
  590. package/dist/esm/components/tabs/CTabContent.js +4 -4
  591. package/dist/esm/components/tabs/CTabContent.js.map +1 -1
  592. package/dist/esm/components/tabs/CTabList.js +14 -14
  593. package/dist/esm/components/tabs/CTabList.js.map +1 -1
  594. package/dist/esm/components/tabs/CTabPane.js +7 -7
  595. package/dist/esm/components/tabs/CTabPane.js.map +1 -1
  596. package/dist/esm/components/tabs/CTabPanel.js +11 -11
  597. package/dist/esm/components/tabs/CTabPanel.js.map +1 -1
  598. package/dist/esm/components/tabs/CTabs.js +7 -8
  599. package/dist/esm/components/tabs/CTabs.js.map +1 -1
  600. package/dist/esm/components/tabs/CTabsContext.js +1 -1
  601. package/dist/esm/components/tabs/CTabsContext.js.map +1 -1
  602. package/dist/esm/components/toast/CToast.js +22 -26
  603. package/dist/esm/components/toast/CToast.js.map +1 -1
  604. package/dist/esm/components/toast/CToastBody.js +4 -4
  605. package/dist/esm/components/toast/CToastBody.js.map +1 -1
  606. package/dist/esm/components/toast/CToastClose.js +6 -6
  607. package/dist/esm/components/toast/CToastClose.js.map +1 -1
  608. package/dist/esm/components/toast/CToastContext.js +1 -1
  609. package/dist/esm/components/toast/CToastContext.js.map +1 -1
  610. package/dist/esm/components/toast/CToastHeader.js +4 -4
  611. package/dist/esm/components/toast/CToastHeader.js.map +1 -1
  612. package/dist/esm/components/toast/CToaster.js +13 -14
  613. package/dist/esm/components/toast/CToaster.js.map +1 -1
  614. package/dist/esm/components/tooltip/CTooltip.js +31 -31
  615. package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
  616. package/dist/esm/components/widgets/CWidgetStatsA.js +4 -5
  617. package/dist/esm/components/widgets/CWidgetStatsA.js.map +1 -1
  618. package/dist/esm/components/widgets/CWidgetStatsB.js +5 -5
  619. package/dist/esm/components/widgets/CWidgetStatsB.js.map +1 -1
  620. package/dist/esm/components/widgets/CWidgetStatsC.js +5 -5
  621. package/dist/esm/components/widgets/CWidgetStatsC.js.map +1 -1
  622. package/dist/esm/components/widgets/CWidgetStatsD.js +8 -9
  623. package/dist/esm/components/widgets/CWidgetStatsD.js.map +1 -1
  624. package/dist/esm/components/widgets/CWidgetStatsE.js +4 -4
  625. package/dist/esm/components/widgets/CWidgetStatsE.js.map +1 -1
  626. package/dist/esm/components/widgets/CWidgetStatsF.js +7 -7
  627. package/dist/esm/components/widgets/CWidgetStatsF.js.map +1 -1
  628. package/dist/esm/hooks/useClipboard.js +22 -34
  629. package/dist/esm/hooks/useClipboard.js.map +1 -1
  630. package/dist/esm/hooks/useColorModes.js +15 -20
  631. package/dist/esm/hooks/useColorModes.js.map +1 -1
  632. package/dist/esm/hooks/useForkedRef.js +6 -10
  633. package/dist/esm/hooks/useForkedRef.js.map +1 -1
  634. package/dist/esm/hooks/usePopper.js +11 -11
  635. package/dist/esm/hooks/usePopper.js.map +1 -1
  636. package/dist/esm/index.js +1 -0
  637. package/dist/esm/index.js.map +1 -1
  638. package/dist/esm/node_modules/tslib/tslib.es6.js +1 -50
  639. package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -1
  640. package/dist/esm/props.js +6 -6
  641. package/dist/esm/props.js.map +1 -1
  642. package/dist/esm/utils/executeAfterTransition.js +8 -10
  643. package/dist/esm/utils/executeAfterTransition.js.map +1 -1
  644. package/dist/esm/utils/getNextActiveElement.js +3 -3
  645. package/dist/esm/utils/getNextActiveElement.js.map +1 -1
  646. package/dist/esm/utils/getRTLPlacement.js +1 -1
  647. package/dist/esm/utils/getRTLPlacement.js.map +1 -1
  648. package/dist/esm/utils/getTransitionDurationFromElement.js +4 -4
  649. package/dist/esm/utils/getTransitionDurationFromElement.js.map +1 -1
  650. package/dist/esm/utils/isInViewport.js +2 -2
  651. package/dist/esm/utils/isInViewport.js.map +1 -1
  652. package/dist/esm/utils/isRTL.js +1 -1
  653. package/dist/esm/utils/isRTL.js.map +1 -1
  654. package/package.json +10 -10
  655. package/src/components/accordion/CAccordion.tsx +1 -1
  656. package/src/components/accordion/CAccordionHeader.tsx +1 -1
  657. package/src/components/alert/CAlert.tsx +3 -3
  658. package/src/components/alert/CAlertHeading.tsx +1 -1
  659. package/src/components/alert/CAlertLink.tsx +1 -1
  660. package/src/components/alert/__tests__/CAlertHeading.spec.tsx +1 -1
  661. package/src/components/alert/__tests__/CAlertLink.spec.tsx +1 -1
  662. package/src/components/avatar/CAvatar.tsx +2 -2
  663. package/src/components/avatar/__tests__/CAvatar.spec.tsx +2 -2
  664. package/src/components/backdrop/CBackdrop.tsx +1 -1
  665. package/src/components/backdrop/__tests__/CBackdrop.spec.tsx +1 -1
  666. package/src/components/badge/CBadge.tsx +3 -3
  667. package/src/components/badge/__tests__/CBadge.spec.tsx +1 -1
  668. package/src/components/breadcrumb/CBreadcrumb.tsx +1 -1
  669. package/src/components/breadcrumb/CBreadcrumbItem.tsx +2 -2
  670. package/src/components/breadcrumb/__tests__/CBreadcrumb.spec.tsx +1 -1
  671. package/src/components/breadcrumb/__tests__/CBreadcrumbItem.spec.tsx +1 -1
  672. package/src/components/button/__tests__/CButton.spec.tsx +2 -2
  673. package/src/components/button-group/CButtonGroup.tsx +2 -2
  674. package/src/components/button-group/CButtonToolbar.tsx +1 -1
  675. package/src/components/button-group/__tests__/CButtonGroup.spec.tsx +2 -2
  676. package/src/components/button-group/__tests__/CButtonToolbar.spec.tsx +1 -1
  677. package/src/components/callout/CCallout.tsx +2 -2
  678. package/src/components/callout/__tests__/CCallout.spec.tsx +1 -1
  679. package/src/components/card/CCard.tsx +2 -2
  680. package/src/components/card/CCardBody.tsx +1 -1
  681. package/src/components/card/CCardFooter.tsx +1 -1
  682. package/src/components/card/CCardGroup.tsx +1 -1
  683. package/src/components/card/CCardImageOverlay.tsx +1 -1
  684. package/src/components/card/CCardLink.tsx +1 -1
  685. package/src/components/card/CCardSubtitle.tsx +1 -1
  686. package/src/components/card/__tests__/CCard.spec.tsx +1 -1
  687. package/src/components/card/__tests__/CCardGroup.spec.tsx +1 -1
  688. package/src/components/card/__tests__/CCardHeader.spec.tsx +1 -1
  689. package/src/components/card/__tests__/CCardLink.spec.tsx +1 -1
  690. package/src/components/card/__tests__/CCardSubtitle.spec.tsx +1 -1
  691. package/src/components/card/__tests__/CCardText.spec.tsx +1 -1
  692. package/src/components/card/__tests__/CCardTitle.spec.tsx +1 -1
  693. package/src/components/carousel/__tests__/CCarousel.spec.tsx +3 -3
  694. package/src/components/close-button/CCloseButton.tsx +2 -2
  695. package/src/components/collapse/CCollapse.tsx +1 -1
  696. package/src/components/dropdown/CDropdown.tsx +214 -106
  697. package/src/components/dropdown/CDropdownContext.ts +1 -1
  698. package/src/components/dropdown/CDropdownHeader.tsx +1 -0
  699. package/src/components/dropdown/CDropdownItemPlain.tsx +1 -0
  700. package/src/components/dropdown/CDropdownMenu.tsx +1 -0
  701. package/src/components/dropdown/CDropdownToggle.tsx +28 -4
  702. package/src/components/dropdown/__tests__/CDropdown.spec.tsx +3 -3
  703. package/src/components/dropdown/__tests__/CDropdownHeader.spec.tsx +1 -1
  704. package/src/components/dropdown/__tests__/CDropdownItem.spec.tsx +1 -1
  705. package/src/components/dropdown/__tests__/CDropdownItemPlain.spec.tsx +1 -1
  706. package/src/components/dropdown/__tests__/CDropdownMenu.spec.tsx +1 -1
  707. package/src/components/dropdown/__tests__/CDropdownToggle.spec.tsx +1 -1
  708. package/src/components/dropdown/utils.ts +23 -2
  709. package/src/components/focus-trap/CFocusTrap.tsx +254 -0
  710. package/src/components/focus-trap/__tests__/CFocusTrap.spec.tsx +232 -0
  711. package/src/components/focus-trap/__tests__/__snapshots__/CFocusTrap.spec.tsx.snap +21 -0
  712. package/src/components/focus-trap/index.ts +3 -0
  713. package/src/components/focus-trap/utils.ts +115 -0
  714. package/src/components/footer/CFooter.tsx +1 -1
  715. package/src/components/footer/__tests__/CFooter.spec.tsx +1 -1
  716. package/src/components/form/CForm.tsx +1 -1
  717. package/src/components/form/CFormCheck.tsx +5 -5
  718. package/src/components/form/CFormFeedback.tsx +2 -2
  719. package/src/components/form/CFormFloating.tsx +1 -1
  720. package/src/components/form/CFormInput.tsx +4 -4
  721. package/src/components/form/CFormLabel.tsx +1 -1
  722. package/src/components/form/CFormRange.tsx +1 -1
  723. package/src/components/form/CFormSelect.tsx +3 -3
  724. package/src/components/form/CFormSwitch.tsx +2 -2
  725. package/src/components/form/CFormTextarea.tsx +3 -3
  726. package/src/components/form/CInputGroup.tsx +2 -2
  727. package/src/components/form/CInputGroupText.tsx +1 -1
  728. package/src/components/form/__tests__/CForm.spec.tsx +2 -2
  729. package/src/components/form/__tests__/CFormCheck.spec.tsx +2 -2
  730. package/src/components/form/__tests__/CFormControl.spec.tsx +1 -1
  731. package/src/components/form/__tests__/CFormFeedback.spec.tsx +2 -2
  732. package/src/components/form/__tests__/CFormInput.spec.tsx +1 -1
  733. package/src/components/form/__tests__/CFormRange.spec.tsx +1 -1
  734. package/src/components/form/__tests__/CFormSelect.spec.tsx +1 -1
  735. package/src/components/form/__tests__/CFormSwitch.spec.tsx +1 -1
  736. package/src/components/form/__tests__/CFormText.spec.tsx +1 -1
  737. package/src/components/form/__tests__/CFormTextarea.spec.tsx +1 -1
  738. package/src/components/form/__tests__/CInputGroup.spec.tsx +1 -1
  739. package/src/components/form/__tests__/CInputGroupText.spec.tsx +1 -1
  740. package/src/components/grid/CCol.tsx +2 -2
  741. package/src/components/grid/CContainer.tsx +2 -2
  742. package/src/components/grid/CRow.tsx +1 -1
  743. package/src/components/grid/__tests__/CCol.spec.tsx +2 -2
  744. package/src/components/grid/__tests__/CContainer.spec.tsx +2 -2
  745. package/src/components/grid/__tests__/CRow.spec.tsx +5 -5
  746. package/src/components/header/CHeader.tsx +1 -1
  747. package/src/components/header/CHeaderDivider.tsx +1 -1
  748. package/src/components/header/CHeaderText.tsx +1 -1
  749. package/src/components/header/CHeaderToggler.tsx +1 -1
  750. package/src/components/header/__tests__/CHeader.spec.tsx +1 -1
  751. package/src/components/header/__tests__/CHeaderBrand.spec.tsx +1 -1
  752. package/src/components/header/__tests__/CHeaderNav.spec.tsx +1 -1
  753. package/src/components/image/CImage.tsx +2 -2
  754. package/src/components/image/__tests__/CImage.spec.tsx +1 -1
  755. package/src/components/index.ts +1 -0
  756. package/src/components/link/__tests__/CLink.spec.tsx +3 -3
  757. package/src/components/list-group/CListGroup.tsx +1 -1
  758. package/src/components/list-group/CListGroupItem.tsx +2 -2
  759. package/src/components/list-group/__tests__/CListGroup.spec.tsx +2 -2
  760. package/src/components/list-group/__tests__/CListGroupItem.spec.tsx +1 -1
  761. package/src/components/modal/CModal.tsx +5 -13
  762. package/src/components/modal/CModalBody.tsx +1 -1
  763. package/src/components/modal/CModalContent.tsx +1 -1
  764. package/src/components/modal/CModalDialog.tsx +2 -2
  765. package/src/components/modal/CModalFooter.tsx +1 -1
  766. package/src/components/modal/CModalHeader.tsx +1 -1
  767. package/src/components/modal/__tests__/CModal.spec.tsx +2 -2
  768. package/src/components/modal/__tests__/CModalDialog.spec.tsx +1 -1
  769. package/src/components/modal/__tests__/CModalTitle.spec.tsx +1 -1
  770. package/src/components/nav/CNavGroup.tsx +2 -2
  771. package/src/components/nav/CNavGroupItems.tsx +1 -1
  772. package/src/components/nav/__tests__/CNavGroup.spec.tsx +1 -1
  773. package/src/components/nav/__tests__/CNavItem.spec.tsx +1 -1
  774. package/src/components/nav/__tests__/CNavLink.spec.tsx +1 -1
  775. package/src/components/navbar/CNavbar.tsx +3 -3
  776. package/src/components/navbar/CNavbarText.tsx +1 -1
  777. package/src/components/navbar/CNavbarToggler.tsx +1 -1
  778. package/src/components/navbar/__tests__/CNavbar.spec.tsx +2 -2
  779. package/src/components/navbar/__tests__/CNavbarBrand.spec.tsx +1 -1
  780. package/src/components/navbar/__tests__/CNavbarNav.spec.tsx +1 -1
  781. package/src/components/offcanvas/COffcanvas.tsx +26 -24
  782. package/src/components/offcanvas/COffcanvasBody.tsx +1 -1
  783. package/src/components/offcanvas/COffcanvasHeader.tsx +1 -1
  784. package/src/components/offcanvas/COffcanvasTitle.tsx +1 -1
  785. package/src/components/offcanvas/__tests__/COffcanvasTitle.spec.tsx +1 -1
  786. package/src/components/pagination/CPagination.tsx +2 -2
  787. package/src/components/pagination/CPaginationItem.tsx +2 -2
  788. package/src/components/pagination/__tests__/CPagination.spec.tsx +2 -2
  789. package/src/components/pagination/__tests__/CPaginationItem.spec.tsx +1 -1
  790. package/src/components/placeholder/CPlaceholder.tsx +2 -2
  791. package/src/components/placeholder/__tests__/CPlaceholder.spec.tsx +1 -1
  792. package/src/components/progress/CProgress.tsx +3 -3
  793. package/src/components/progress/CProgressBar.tsx +2 -2
  794. package/src/components/progress/__tests__/CProgress.spec.tsx +1 -1
  795. package/src/components/progress/__tests__/CProgressBar.spec.tsx +1 -1
  796. package/src/components/sidebar/CSidebarFooter.tsx +1 -1
  797. package/src/components/sidebar/CSidebarHeader.tsx +1 -1
  798. package/src/components/sidebar/CSidebarToggler.tsx +1 -1
  799. package/src/components/sidebar/__tests__/CSidebar.spec.tsx +2 -2
  800. package/src/components/spinner/CSpinner.tsx +3 -3
  801. package/src/components/spinner/__tests__/CSpinner.spec.tsx +1 -1
  802. package/src/components/table/CTable.tsx +3 -3
  803. package/src/components/table/CTableBody.tsx +2 -2
  804. package/src/components/table/CTableDataCell.tsx +2 -2
  805. package/src/components/table/CTableFoot.tsx +2 -2
  806. package/src/components/table/CTableHead.tsx +2 -2
  807. package/src/components/table/CTableHeaderCell.tsx +2 -2
  808. package/src/components/table/CTableRow.tsx +2 -2
  809. package/src/components/table/__tests__/CTable.spec.tsx +2 -2
  810. package/src/components/table/__tests__/CTableBody.spec.tsx +1 -1
  811. package/src/components/table/__tests__/CTableDataCell.spec.tsx +2 -2
  812. package/src/components/table/__tests__/CTableFoot.spec.tsx +1 -1
  813. package/src/components/table/__tests__/CTableHead.spec.tsx +1 -1
  814. package/src/components/table/__tests__/CTableHeaderCell.spec.tsx +2 -2
  815. package/src/components/table/__tests__/CTableRow.spec.tsx +2 -2
  816. package/src/components/tabs/CTab.tsx +2 -2
  817. package/src/components/tabs/CTabContent.tsx +1 -1
  818. package/src/components/tabs/CTabPane.tsx +2 -2
  819. package/src/components/tabs/CTabPanel.tsx +2 -2
  820. package/src/components/toast/CToastBody.tsx +1 -1
  821. package/src/components/toast/CToastHeader.tsx +1 -1
  822. package/src/components/toast/__tests__/CToaster.spec.tsx +2 -2
  823. package/src/components/widgets/CWidgetStatsA.tsx +1 -1
  824. package/src/components/widgets/CWidgetStatsB.tsx +1 -1
  825. package/src/components/widgets/CWidgetStatsC.tsx +2 -2
  826. package/src/components/widgets/CWidgetStatsD.tsx +2 -2
  827. package/src/components/widgets/CWidgetStatsE.tsx +1 -1
  828. package/src/components/widgets/CWidgetStatsF.tsx +1 -1
  829. package/src/components/widgets/__tests__/CWidgetStatsA.spec.tsx +1 -1
  830. package/src/components/widgets/__tests__/CWidgetStatsB.spec.tsx +1 -1
  831. package/src/components/widgets/__tests__/CWidgetStatsC.spec.tsx +1 -1
  832. package/src/components/widgets/__tests__/CWidgetStatsD.spec.tsx +1 -1
  833. package/src/components/widgets/__tests__/CWidgetStatsE.spec.tsx +1 -1
  834. package/src/components/widgets/__tests__/CWidgetStatsF.spec.tsx +2 -2
  835. package/src/helpers/polymorphicComponent.ts +1 -1
  836. package/src/utils/executeAfterTransition.ts +1 -1
  837. package/src/utils/getNextActiveElement.ts +1 -1
  838. package/src/utils/mergeClassNames.ts +1 -1
@@ -18,7 +18,7 @@ test('loads and displays CCarousel component', async () => {
18
18
  Item-3
19
19
  <CCarouselCaption>Caption-3</CCarouselCaption>
20
20
  </CCarouselItem>
21
- </CCarousel>,
21
+ </CCarousel>
22
22
  )
23
23
 
24
24
  const carousel = document.querySelector('.carousel')
@@ -74,7 +74,7 @@ test('CCarousel click on indicator', async () => {
74
74
  Item-3
75
75
  <CCarouselCaption>Caption-3</CCarouselCaption>
76
76
  </CCarouselItem>
77
- </CCarousel>,
77
+ </CCarousel>
78
78
  )
79
79
  const item1 = getByText(container, 'Item-1')
80
80
  const item2 = getByText(container, 'Item-2')
@@ -118,7 +118,7 @@ test('CCarousel click on button', async () => {
118
118
  Item-3
119
119
  <CCarouselCaption>Caption-3</CCarouselCaption>
120
120
  </CCarouselItem>
121
- </CCarousel>,
121
+ </CCarousel>
122
122
  )
123
123
  const item1 = getByText(container, 'Item-1')
124
124
  const item2 = getByText(container, 'Item-2')
@@ -35,7 +35,7 @@ export const CCloseButton = forwardRef<HTMLButtonElement, CCloseButtonProps>(
35
35
  'btn-close-white': white,
36
36
  },
37
37
  disabled,
38
- className,
38
+ className
39
39
  )}
40
40
  aria-label="Close"
41
41
  disabled={disabled}
@@ -44,7 +44,7 @@ export const CCloseButton = forwardRef<HTMLButtonElement, CCloseButtonProps>(
44
44
  ref={ref}
45
45
  />
46
46
  )
47
- },
47
+ }
48
48
  )
49
49
 
50
50
  CCloseButton.propTypes = {
@@ -111,7 +111,7 @@ export const CCollapse = forwardRef<HTMLDivElement, CCollapseProps>(
111
111
  }}
112
112
  </CSSTransition>
113
113
  )
114
- },
114
+ }
115
115
  )
116
116
 
117
117
  CCollapse.propTypes = {
@@ -21,7 +21,8 @@ import type { Placements } from '../../types'
21
21
  import { getNextActiveElement, isRTL } from '../../utils'
22
22
 
23
23
  import type { Alignments, Directions } from './types'
24
- import { getPlacement } from './utils'
24
+ import { getPlacement, getReferenceElement } from './utils'
25
+ import { CFocusTrap } from '../focus-trap'
25
26
 
26
27
  export interface CDropdownProps extends HTMLAttributes<HTMLDivElement | HTMLLIElement> {
27
28
  /**
@@ -37,12 +38,15 @@ export interface CDropdownProps extends HTMLAttributes<HTMLDivElement | HTMLLIEl
37
38
  * </CDropdownMenu>
38
39
  * </CDropdown>
39
40
  *
40
- * @type 'start' | 'end' | { xs: 'start' | 'end' } | { sm: 'start' | 'end' } | { md: 'start' | 'end' } | { lg: 'start' | 'end' } | { xl: 'start' | 'end'} | { xxl: 'start' | 'end'}
41
+ * @type 'start' | 'end' | { xs: 'start' | 'end' } | { sm: 'start' | 'end' } |
42
+ * { md: 'start' | 'end' } | { lg: 'start' | 'end' } | { xl: 'start' | 'end'} |
43
+ * { xxl: 'start' | 'end'}
41
44
  */
42
45
  alignment?: Alignments
43
46
 
44
47
  /**
45
- * Determines the root node component (native HTML element or a custom React component) for the React Dropdown.
48
+ * Determines the root node component (native HTML element or a custom React
49
+ * component) for the React Dropdown.
46
50
  */
47
51
  as?: ElementType
48
52
 
@@ -65,7 +69,8 @@ export interface CDropdownProps extends HTMLAttributes<HTMLDivElement | HTMLLIEl
65
69
  className?: string
66
70
 
67
71
  /**
68
- * Appends the React Dropdown Menu to a specific element. You can pass an HTML element or a function returning an element. Defaults to `document.body`.
72
+ * Appends the React Dropdown Menu to a specific element. You can pass an HTML
73
+ * element or a function returning an element. Defaults to `document.body`.
69
74
  *
70
75
  * @example
71
76
  * // Append the menu to a custom container
@@ -78,7 +83,8 @@ export interface CDropdownProps extends HTMLAttributes<HTMLDivElement | HTMLLIEl
78
83
  container?: DocumentFragment | Element | (() => DocumentFragment | Element | null) | null
79
84
 
80
85
  /**
81
- * Applies a darker color scheme to the React Dropdown Menu, often used within dark navbars.
86
+ * Applies a darker color scheme to the React Dropdown Menu, often used within
87
+ * dark navbars.
82
88
  */
83
89
  dark?: boolean
84
90
 
@@ -88,7 +94,8 @@ export interface CDropdownProps extends HTMLAttributes<HTMLDivElement | HTMLLIEl
88
94
  direction?: 'center' | 'dropup' | 'dropup-center' | 'dropend' | 'dropstart'
89
95
 
90
96
  /**
91
- * Defines x and y offsets ([x, y]) for the React Dropdown Menu relative to its target.
97
+ * Defines x and y offsets ([x, y]) for the React Dropdown Menu relative to
98
+ * its target.
92
99
  *
93
100
  * @example
94
101
  * // Offset the menu 10px in X and 5px in Y direction
@@ -111,19 +118,23 @@ export interface CDropdownProps extends HTMLAttributes<HTMLDivElement | HTMLLIEl
111
118
  onShow?: () => void
112
119
 
113
120
  /**
114
- * Determines the placement of the React Dropdown Menu after Popper.js modifiers.
121
+ * Determines the placement of the React Dropdown Menu after Popper.js
122
+ * modifiers.
115
123
  *
116
124
  * @type 'auto' | 'auto-start' | 'auto-end' | 'top-end' | 'top' | 'top-start' | 'bottom-end' | 'bottom' | 'bottom-start' | 'right-start' | 'right' | 'right-end' | 'left-start' | 'left' | 'left-end'
117
125
  */
118
126
  placement?: Placements
119
127
 
120
128
  /**
121
- * Enables or disables dynamic positioning via Popper.js for the React Dropdown Menu.
129
+ * Enables or disables dynamic positioning via Popper.js for the React
130
+ * Dropdown Menu.
122
131
  */
123
132
  popper?: boolean
124
133
 
125
134
  /**
126
- * Provides a custom Popper.js configuration or a function that returns a modified Popper.js configuration for advanced positioning of the React Dropdown Menu. [Read more](https://popper.js.org/docs/v2/constructors/#options)
135
+ * Provides a custom Popper.js configuration or a function that returns a
136
+ * modified Popper.js configuration for advanced positioning of the React
137
+ * Dropdown Menu. [Read more](https://popper.js.org/docs/v2/constructors/#options)
127
138
  *
128
139
  * @example
129
140
  * // Providing a custom popper config
@@ -143,12 +154,34 @@ export interface CDropdownProps extends HTMLAttributes<HTMLDivElement | HTMLLIEl
143
154
  popperConfig?: Partial<Options> | ((defaultPopperConfig: Partial<Options>) => Partial<Options>)
144
155
 
145
156
  /**
146
- * Renders the React Dropdown Menu using a React Portal, allowing it to escape the DOM hierarchy for improved positioning.
157
+ * Renders the React Dropdown Menu using a React Portal, allowing it to escape
158
+ * the DOM hierarchy for improved positioning.
147
159
  *
148
160
  * @since 4.8.0
149
161
  */
150
162
  portal?: boolean
151
163
 
164
+ /**
165
+ * Sets the reference element for positioning the React Dropdown Menu.
166
+ * - `toggle` - The React Dropdown Toggle button (default).
167
+ * - `parent` - The React Dropdown wrapper element.
168
+ * - `HTMLElement` - A custom HTML element.
169
+ * - `React.RefObject` - A custom reference element.
170
+ *
171
+ * @example
172
+ * // Use the parent element as reference for positioning
173
+ * <CDropdown reference="parent">
174
+ * <CDropdownToggle>Toggle dropdown</CDropdownToggle>
175
+ * <CDropdownMenu>
176
+ * <CDropdownItem>Action</CDropdownItem>
177
+ * <CDropdownItem>Another Action</CDropdownItem>
178
+ * </CDropdownMenu>
179
+ * </CDropdown>
180
+ *
181
+ * @since 5.9.0
182
+ */
183
+ reference?: 'parent' | 'toggle' | HTMLElement | React.RefObject<HTMLElement | null>
184
+
152
185
  /**
153
186
  * Defines the visual variant of the React Dropdown
154
187
  */
@@ -192,6 +225,7 @@ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>
192
225
  popper = true,
193
226
  popperConfig,
194
227
  portal = false,
228
+ reference = 'toggle',
195
229
  variant = 'btn-group',
196
230
  visible = false,
197
231
  ...rest
@@ -202,6 +236,7 @@ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>
202
236
  const dropdownMenuRef = useRef<HTMLDivElement | HTMLUListElement>(null)
203
237
  const forkedRef = useForkedRef(ref, dropdownRef)
204
238
  const [dropdownToggleElement, setDropdownToggleElement] = useState<HTMLElement | null>(null)
239
+ const [pendingKeyDownEvent, setPendingKeyDownEvent] = useState<KeyboardEvent | null>(null)
205
240
  const [_visible, setVisible] = useState(visible)
206
241
  const { initPopper, destroyPopper } = usePopper()
207
242
 
@@ -242,134 +277,207 @@ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>
242
277
  }, [visible])
243
278
 
244
279
  useEffect(() => {
245
- const toggleElement = dropdownToggleElement
246
- const menuElement = dropdownMenuRef.current
247
- if (allowPopperUse && menuElement && toggleElement && _visible) {
248
- initPopper(toggleElement, menuElement, computedPopperConfig)
280
+ return () => {
281
+ if (_visible) {
282
+ handleHide()
283
+ }
249
284
  }
250
- }, [dropdownToggleElement])
285
+ }, [])
251
286
 
252
- const handleShow = () => {
253
- const toggleElement = dropdownToggleElement
287
+ useEffect(() => {
288
+ const referenceElement = getReferenceElement(reference, dropdownToggleElement, dropdownRef)
254
289
  const menuElement = dropdownMenuRef.current
290
+ if (allowPopperUse && menuElement && referenceElement && _visible) {
291
+ initPopper(referenceElement, menuElement, computedPopperConfig)
292
+ }
293
+ }, [dropdownToggleElement, reference])
255
294
 
256
- if (toggleElement && menuElement) {
257
- setVisible(true)
258
-
259
- if (allowPopperUse) {
260
- initPopper(toggleElement, menuElement, computedPopperConfig)
261
- }
262
-
263
- toggleElement.focus()
264
- toggleElement.addEventListener('keydown', handleKeydown)
265
- menuElement.addEventListener('keydown', handleKeydown)
266
-
267
- window.addEventListener('mouseup', handleMouseUp)
268
- window.addEventListener('keyup', handleKeyup)
269
-
270
- onShow?.()
295
+ useEffect(() => {
296
+ if (pendingKeyDownEvent !== null) {
297
+ handleKeydown(pendingKeyDownEvent)
298
+ setPendingKeyDownEvent(null)
271
299
  }
272
- }
300
+ }, [pendingKeyDownEvent])
273
301
 
274
- const handleHide = () => {
302
+ const handleHide = useCallback(() => {
275
303
  setVisible(false)
276
304
 
277
- const toggleElement = dropdownToggleElement
278
305
  const menuElement = dropdownMenuRef.current
306
+ const toggleElement = dropdownToggleElement
279
307
 
280
308
  if (allowPopperUse) {
281
309
  destroyPopper()
282
310
  }
283
311
 
284
- toggleElement?.removeEventListener('keydown', handleKeydown)
285
312
  menuElement?.removeEventListener('keydown', handleKeydown)
313
+ toggleElement?.removeEventListener('keydown', handleKeydown)
286
314
 
287
- window.removeEventListener('mouseup', handleMouseUp)
315
+ window.removeEventListener('click', handleClick)
288
316
  window.removeEventListener('keyup', handleKeyup)
289
317
 
290
318
  onHide?.()
291
- }
292
-
293
- const handleKeydown = (event: KeyboardEvent) => {
294
- if (
295
- _visible &&
296
- dropdownMenuRef.current &&
297
- (event.key === 'ArrowDown' || event.key === 'ArrowUp')
298
- ) {
319
+ }, [allowPopperUse, dropdownToggleElement, destroyPopper, onHide])
320
+
321
+ const handleKeydown = useCallback((event: KeyboardEvent) => {
322
+ if (!dropdownMenuRef.current) {
323
+ return
324
+ }
325
+
326
+ if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
299
327
  event.preventDefault()
300
328
  const target = event.target as HTMLElement
301
- const items: HTMLElement[] = Array.from(
302
- dropdownMenuRef.current.querySelectorAll('.dropdown-item:not(.disabled):not(:disabled)')
303
- )
329
+ const items = [
330
+ ...dropdownMenuRef.current.querySelectorAll(
331
+ '.dropdown-item:not(.disabled):not(:disabled)'
332
+ ),
333
+ ] as HTMLElement[]
304
334
  getNextActiveElement(items, target, event.key === 'ArrowDown', true).focus()
305
335
  }
306
- }
336
+ }, [])
307
337
 
308
- const handleKeyup = (event: KeyboardEvent) => {
309
- if (autoClose === false) {
310
- return
311
- }
338
+ const handleKeyup = useCallback(
339
+ (event: KeyboardEvent) => {
340
+ if (autoClose === false) {
341
+ return
342
+ }
312
343
 
313
- if (event.key === 'Escape') {
314
- handleHide()
315
- }
316
- }
344
+ if (event.key === 'Escape') {
345
+ handleHide()
346
+ dropdownToggleElement?.focus()
347
+ }
348
+ },
349
+ [autoClose, dropdownToggleElement, handleHide]
350
+ )
317
351
 
318
- const handleMouseUp = (event: Event) => {
319
- if (!dropdownToggleElement || !dropdownMenuRef.current) {
320
- return
321
- }
352
+ const handleClick = useCallback(
353
+ (event: MouseEvent) => {
354
+ if (!dropdownToggleElement || !dropdownMenuRef.current) {
355
+ return
356
+ }
322
357
 
323
- if (dropdownToggleElement.contains(event.target as HTMLElement)) {
324
- return
325
- }
358
+ if ((event as MouseEvent).button === 2) {
359
+ return
360
+ }
326
361
 
327
- if (
328
- autoClose === true ||
329
- (autoClose === 'inside' && dropdownMenuRef.current.contains(event.target as HTMLElement)) ||
330
- (autoClose === 'outside' && !dropdownMenuRef.current.contains(event.target as HTMLElement))
331
- ) {
332
- setTimeout(() => handleHide(), 1)
333
- return
334
- }
335
- }
362
+ const composedPath = event.composedPath()
363
+ const isOnToggle = composedPath.includes(dropdownToggleElement)
364
+ const isOnMenu = composedPath.includes(dropdownMenuRef.current)
336
365
 
337
- const contextValues = {
338
- alignment,
339
- container,
340
- dark,
341
- dropdownMenuRef,
342
- dropdownToggleRef,
343
- handleHide,
344
- handleShow,
345
- popper: allowPopperUse,
346
- portal,
347
- variant,
348
- visible: _visible,
349
- }
366
+ if (isOnToggle) {
367
+ return
368
+ }
369
+
370
+ const target = event.target as HTMLElement | null
371
+ const FORM_TAG_RE = /^(input|select|option|textarea|form|button|label)$/i
372
+
373
+ if (isOnMenu && target && FORM_TAG_RE.test(target.tagName)) {
374
+ return
375
+ }
376
+
377
+ if (
378
+ autoClose === true ||
379
+ (autoClose === 'inside' && isOnMenu) ||
380
+ (autoClose === 'outside' && !isOnMenu)
381
+ ) {
382
+ handleHide()
383
+ }
384
+ },
385
+ [autoClose, dropdownToggleElement, handleHide]
386
+ )
387
+
388
+ const handleShow = useCallback(
389
+ (event?: KeyboardEvent) => {
390
+ const menuElement = dropdownMenuRef.current
391
+ const referenceElement = getReferenceElement(reference, dropdownToggleElement, dropdownRef)
392
+ const toggleElement = dropdownToggleElement
393
+
394
+ if (menuElement && referenceElement && toggleElement) {
395
+ setVisible(true)
396
+
397
+ if (allowPopperUse) {
398
+ initPopper(referenceElement, menuElement, computedPopperConfig)
399
+ }
400
+
401
+ toggleElement.focus()
402
+ toggleElement.addEventListener('keydown', handleKeydown)
403
+ menuElement.addEventListener('keydown', handleKeydown)
404
+
405
+ window.addEventListener('click', handleClick)
406
+ window.addEventListener('keyup', handleKeyup)
407
+
408
+ if (event && (event.key === 'ArrowDown' || event.key === 'ArrowUp')) {
409
+ setPendingKeyDownEvent(event)
410
+ }
411
+
412
+ onShow?.()
413
+ }
414
+ },
415
+ [
416
+ allowPopperUse,
417
+ computedPopperConfig,
418
+ dropdownToggleElement,
419
+ reference,
420
+ handleClick,
421
+ handleKeydown,
422
+ handleKeyup,
423
+ initPopper,
424
+ onShow,
425
+ ]
426
+ )
427
+
428
+ const contextValues = useMemo(
429
+ () => ({
430
+ alignment,
431
+ container,
432
+ dark,
433
+ dropdownMenuRef,
434
+ dropdownToggleRef,
435
+ handleHide,
436
+ handleShow,
437
+ popper: allowPopperUse,
438
+ portal,
439
+ variant,
440
+ visible: _visible,
441
+ }),
442
+ [
443
+ alignment,
444
+ container,
445
+ dark,
446
+ dropdownMenuRef,
447
+ dropdownToggleRef,
448
+ handleHide,
449
+ handleShow,
450
+ allowPopperUse,
451
+ portal,
452
+ variant,
453
+ _visible,
454
+ ]
455
+ )
350
456
 
351
457
  return (
352
458
  <CDropdownContext.Provider value={contextValues}>
353
- {variant === 'input-group' ? (
354
- <>{children}</>
355
- ) : (
356
- <Component
357
- className={classNames(
358
- variant === 'nav-item' ? 'nav-item dropdown' : variant,
359
- {
360
- 'dropdown-center': direction === 'center',
361
- 'dropup dropup-center': direction === 'dropup-center',
362
- [`${direction}`]:
363
- direction && direction !== 'center' && direction !== 'dropup-center',
364
- },
365
- className
366
- )}
367
- {...rest}
368
- ref={forkedRef}
369
- >
370
- {children}
371
- </Component>
372
- )}
459
+ <CFocusTrap active={portal && _visible} additionalContainer={dropdownMenuRef} restoreFocus>
460
+ {variant === 'input-group' ? (
461
+ <>{children}</>
462
+ ) : (
463
+ <Component
464
+ className={classNames(
465
+ variant === 'nav-item' ? 'nav-item dropdown' : variant,
466
+ {
467
+ 'dropdown-center': direction === 'center',
468
+ 'dropup dropup-center': direction === 'dropup-center',
469
+ [`${direction}`]:
470
+ direction && direction !== 'center' && direction !== 'dropup-center',
471
+ },
472
+ className
473
+ )}
474
+ {...rest}
475
+ ref={forkedRef}
476
+ >
477
+ {children}
478
+ </Component>
479
+ )}
480
+ </CFocusTrap>
373
481
  </CDropdownContext.Provider>
374
482
  )
375
483
  }
@@ -8,7 +8,7 @@ export interface CDropdownContextProps {
8
8
  dropdownMenuRef: RefObject<HTMLDivElement | HTMLUListElement | null>
9
9
  dropdownToggleRef: (node: HTMLElement | null) => void
10
10
  handleHide?: () => void
11
- handleShow?: () => void
11
+ handleShow?: (event?: KeyboardEvent) => void
12
12
  popper?: boolean
13
13
  portal?: boolean
14
14
  variant?: 'btn-group' | 'dropdown' | 'input-group' | 'nav-item'
@@ -9,6 +9,7 @@ export interface CDropdownHeaderProps extends HTMLAttributes<HTMLHeadingElement>
9
9
  * Component used for the root node. Either a string to use a HTML element or a component.
10
10
  */
11
11
  as?: ElementType
12
+
12
13
  /**
13
14
  * A string of all className you want applied to the component.
14
15
  */
@@ -9,6 +9,7 @@ export interface CDropdownItemPlainProps extends HTMLAttributes<HTMLSpanElement>
9
9
  * Component used for the root node. Either a string to use a HTML element or a component.
10
10
  */
11
11
  as?: ElementType
12
+
12
13
  /**
13
14
  * A string of all className you want applied to the component.
14
15
  */
@@ -15,6 +15,7 @@ export interface CDropdownMenuProps extends HTMLAttributes<HTMLDivElement | HTML
15
15
  * Component used for the root node. Either a string to use a HTML element or a component.
16
16
  */
17
17
  as?: ElementType
18
+
18
19
  /**
19
20
  * A string of all className you want applied to the base component.
20
21
  */
@@ -13,22 +13,38 @@ export interface CDropdownToggleProps extends Omit<CButtonProps, 'type'> {
13
13
  * Enables pseudo element caret on toggler.
14
14
  */
15
15
  caret?: boolean
16
+
16
17
  /**
17
18
  * Create a custom toggler which accepts any content.
18
19
  */
19
20
  custom?: boolean
21
+
20
22
  /**
21
- * If a dropdown `variant` is set to `nav-item` then render the toggler as a link instead of a button.
23
+ * If a dropdown `variant` is set to `nav-item` then render the toggler as a
24
+ * link instead of a button.
22
25
  *
23
26
  * @since 5.0.0
24
27
  */
25
28
  navLink?: boolean
29
+
26
30
  /**
27
- * Similarly, create split button dropdowns with virtually the same markup as single button dropdowns, but with the addition of `.dropdown-toggle-split` className for proper spacing around the dropdown caret.
31
+ * Similarly, create split button dropdowns with virtually the same markup as
32
+ * single button dropdowns, but with the addition of `.dropdown-toggle-split`
33
+ * className for proper spacing around the dropdown caret.
28
34
  */
29
35
  split?: boolean
36
+
30
37
  /**
31
- * Sets which event handlers you’d like provided to your toggle prop. You can specify one trigger or an array of them.
38
+ * Screen reader label for split button dropdown toggle.
39
+ *
40
+ * @default 'Toggle Dropdown'
41
+ * @since 5.9.0
42
+ */
43
+ splitLabel?: string
44
+
45
+ /**
46
+ * Sets which event handlers you'd like provided to your toggle prop. You can
47
+ * specify one trigger or an array of them.
32
48
  *
33
49
  * @type 'hover' | 'focus' | 'click'
34
50
  */
@@ -42,6 +58,7 @@ export const CDropdownToggle: FC<CDropdownToggleProps> = ({
42
58
  className,
43
59
  navLink = true,
44
60
  split,
61
+ splitLabel = 'Toggle Dropdown',
45
62
  trigger = 'click',
46
63
  ...rest
47
64
  }) => {
@@ -64,6 +81,12 @@ export const CDropdownToggle: FC<CDropdownToggleProps> = ({
64
81
  onFocus: () => handleShow?.(),
65
82
  onBlur: () => handleHide?.(),
66
83
  }),
84
+ onKeyDown: (event: React.KeyboardEvent) => {
85
+ if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
86
+ event.preventDefault()
87
+ handleShow?.(event.nativeEvent)
88
+ }
89
+ },
67
90
  }
68
91
 
69
92
  const togglerProps = {
@@ -103,7 +126,7 @@ export const CDropdownToggle: FC<CDropdownToggleProps> = ({
103
126
  return (
104
127
  <CButton {...togglerProps} tabIndex={0} {...rest} ref={dropdownToggleRef}>
105
128
  {children}
106
- {split && <span className="visually-hidden">Toggle Dropdown</span>}
129
+ {split && <span className="visually-hidden">{splitLabel}</span>}
107
130
  </CButton>
108
131
  )
109
132
  }
@@ -114,6 +137,7 @@ CDropdownToggle.propTypes = {
114
137
  className: PropTypes.string,
115
138
  custom: PropTypes.bool,
116
139
  split: PropTypes.bool,
140
+ splitLabel: PropTypes.string,
117
141
  trigger: triggerPropType,
118
142
  }
119
143
 
@@ -30,7 +30,7 @@ test('CDropdown customize', async () => {
30
30
  visible={true}
31
31
  >
32
32
  Test
33
- </CDropdown>,
33
+ </CDropdown>
34
34
  )
35
35
  expect(container).toMatchSnapshot()
36
36
  expect(container.firstChild).toHaveClass('bazinga')
@@ -66,7 +66,7 @@ test('CDropdown opens on toggle click and closes on clicking outside', async ()
66
66
  <CDropdownItem>B</CDropdownItem>
67
67
  </CDropdownMenu>
68
68
  </CDropdown>
69
- </div>,
69
+ </div>
70
70
  )
71
71
 
72
72
  // Ensure the dropdown is initially closed
@@ -110,7 +110,7 @@ test('CDropdown example', async () => {
110
110
  <CDropdownDivider />
111
111
  <CDropdownItem>D</CDropdownItem>
112
112
  </CDropdownMenu>
113
- </CDropdown>,
113
+ </CDropdown>
114
114
  )
115
115
  expect(container).toMatchSnapshot()
116
116
  })
@@ -12,7 +12,7 @@ test('CDropdownHeader customize', async () => {
12
12
  const { container } = render(
13
13
  <CDropdownHeader className="bazinga" as="h3">
14
14
  Test
15
- </CDropdownHeader>,
15
+ </CDropdownHeader>
16
16
  )
17
17
  expect(container).toMatchSnapshot()
18
18
  expect(container.firstChild).toHaveClass('bazinga')
@@ -12,7 +12,7 @@ test('CDropdownItem customize', async () => {
12
12
  const { container } = render(
13
13
  <CDropdownItem className="bazinga" as="div">
14
14
  Test
15
- </CDropdownItem>,
15
+ </CDropdownItem>
16
16
  )
17
17
  expect(container).toMatchSnapshot()
18
18
  expect(container.firstChild).toHaveClass('bazinga')
@@ -12,7 +12,7 @@ test('CDropdownItemPlain customize', async () => {
12
12
  const { container } = render(
13
13
  <CDropdownItemPlain className="bazinga" as="div">
14
14
  Test
15
- </CDropdownItemPlain>,
15
+ </CDropdownItemPlain>
16
16
  )
17
17
  expect(container).toMatchSnapshot()
18
18
  expect(container.firstChild).toHaveClass('bazinga')