@coreui/react 5.7.1 → 5.8.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.
- package/README.md +1 -1
- package/dist/cjs/components/accordion/CAccordion.js +5 -5
- package/dist/cjs/components/accordion/CAccordion.js.map +1 -1
- package/dist/cjs/components/accordion/CAccordionBody.js +4 -4
- package/dist/cjs/components/accordion/CAccordionBody.js.map +1 -1
- package/dist/cjs/components/accordion/CAccordionButton.js +4 -4
- package/dist/cjs/components/accordion/CAccordionButton.js.map +1 -1
- package/dist/cjs/components/accordion/CAccordionContext.js +1 -1
- package/dist/cjs/components/accordion/CAccordionContext.js.map +1 -1
- package/dist/cjs/components/accordion/CAccordionHeader.js +3 -3
- package/dist/cjs/components/accordion/CAccordionHeader.js.map +1 -1
- package/dist/cjs/components/accordion/CAccordionItem.js +11 -11
- package/dist/cjs/components/accordion/CAccordionItem.js.map +1 -1
- package/dist/cjs/components/accordion/CAccordionItemContext.js +1 -1
- package/dist/cjs/components/accordion/CAccordionItemContext.js.map +1 -1
- package/dist/cjs/components/alert/CAlert.js +8 -8
- package/dist/cjs/components/alert/CAlert.js.map +1 -1
- package/dist/cjs/components/alert/CAlertHeading.js +3 -3
- package/dist/cjs/components/alert/CAlertHeading.js.map +1 -1
- package/dist/cjs/components/alert/CAlertLink.js +3 -3
- package/dist/cjs/components/alert/CAlertLink.js.map +1 -1
- package/dist/cjs/components/avatar/CAvatar.js +8 -9
- package/dist/cjs/components/avatar/CAvatar.js.map +1 -1
- package/dist/cjs/components/backdrop/CBackdrop.js +6 -6
- package/dist/cjs/components/backdrop/CBackdrop.js.map +1 -1
- package/dist/cjs/components/badge/CBadge.js +13 -14
- package/dist/cjs/components/badge/CBadge.js.map +1 -1
- package/dist/cjs/components/breadcrumb/CBreadcrumb.js +3 -3
- package/dist/cjs/components/breadcrumb/CBreadcrumb.js.map +1 -1
- package/dist/cjs/components/breadcrumb/CBreadcrumbItem.js +3 -3
- package/dist/cjs/components/breadcrumb/CBreadcrumbItem.js.map +1 -1
- package/dist/cjs/components/button/CButton.js +8 -9
- package/dist/cjs/components/button/CButton.js.map +1 -1
- package/dist/cjs/components/button-group/CButtonGroup.js +3 -4
- package/dist/cjs/components/button-group/CButtonGroup.js.map +1 -1
- package/dist/cjs/components/button-group/CButtonToolbar.js +3 -3
- package/dist/cjs/components/button-group/CButtonToolbar.js.map +1 -1
- package/dist/cjs/components/callout/CCallout.js +5 -6
- package/dist/cjs/components/callout/CCallout.js.map +1 -1
- package/dist/cjs/components/card/CCard.js +7 -8
- package/dist/cjs/components/card/CCard.js.map +1 -1
- package/dist/cjs/components/card/CCardBody.js +3 -3
- package/dist/cjs/components/card/CCardBody.js.map +1 -1
- package/dist/cjs/components/card/CCardFooter.js +3 -3
- package/dist/cjs/components/card/CCardFooter.js.map +1 -1
- package/dist/cjs/components/card/CCardGroup.js +3 -3
- package/dist/cjs/components/card/CCardGroup.js.map +1 -1
- package/dist/cjs/components/card/CCardHeader.js +3 -3
- package/dist/cjs/components/card/CCardHeader.js.map +1 -1
- package/dist/cjs/components/card/CCardImage.js +3 -3
- package/dist/cjs/components/card/CCardImage.js.map +1 -1
- package/dist/cjs/components/card/CCardImageOverlay.js +3 -3
- package/dist/cjs/components/card/CCardImageOverlay.js.map +1 -1
- package/dist/cjs/components/card/CCardLink.js +3 -3
- package/dist/cjs/components/card/CCardLink.js.map +1 -1
- package/dist/cjs/components/card/CCardSubtitle.js +3 -3
- package/dist/cjs/components/card/CCardSubtitle.js.map +1 -1
- package/dist/cjs/components/card/CCardText.js +3 -3
- package/dist/cjs/components/card/CCardText.js.map +1 -1
- package/dist/cjs/components/card/CCardTitle.js +3 -3
- package/dist/cjs/components/card/CCardTitle.js.map +1 -1
- package/dist/cjs/components/carousel/CCarousel.js +41 -41
- package/dist/cjs/components/carousel/CCarousel.js.map +1 -1
- package/dist/cjs/components/carousel/CCarouselCaption.js +3 -3
- package/dist/cjs/components/carousel/CCarouselCaption.js.map +1 -1
- package/dist/cjs/components/carousel/CCarouselContext.js +1 -1
- package/dist/cjs/components/carousel/CCarouselContext.js.map +1 -1
- package/dist/cjs/components/carousel/CCarouselItem.js +21 -21
- package/dist/cjs/components/carousel/CCarouselItem.js.map +1 -1
- package/dist/cjs/components/close-button/CCloseButton.js +3 -3
- package/dist/cjs/components/close-button/CCloseButton.js.map +1 -1
- package/dist/cjs/components/collapse/CCollapse.js +16 -16
- package/dist/cjs/components/collapse/CCollapse.js.map +1 -1
- package/dist/cjs/components/conditional-portal/CConditionalPortal.js +4 -5
- package/dist/cjs/components/conditional-portal/CConditionalPortal.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdown.d.ts +20 -9
- package/dist/cjs/components/dropdown/CDropdown.js +90 -70
- package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownContext.d.ts +1 -1
- package/dist/cjs/components/dropdown/CDropdownContext.js +1 -1
- package/dist/cjs/components/dropdown/CDropdownContext.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownDivider.js +3 -3
- package/dist/cjs/components/dropdown/CDropdownDivider.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownHeader.js +3 -3
- package/dist/cjs/components/dropdown/CDropdownHeader.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownItem.js +3 -3
- package/dist/cjs/components/dropdown/CDropdownItem.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownItemPlain.js +3 -3
- package/dist/cjs/components/dropdown/CDropdownItemPlain.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownMenu.js +6 -6
- package/dist/cjs/components/dropdown/CDropdownMenu.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownToggle.d.ts +7 -3
- package/dist/cjs/components/dropdown/CDropdownToggle.js +18 -13
- package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
- package/dist/cjs/components/dropdown/utils.js +7 -7
- package/dist/cjs/components/dropdown/utils.js.map +1 -1
- package/dist/cjs/components/focus-trap/CFocusTrap.d.ts +59 -0
- package/dist/cjs/components/focus-trap/CFocusTrap.js +162 -0
- package/dist/cjs/components/focus-trap/CFocusTrap.js.map +1 -0
- package/dist/cjs/components/focus-trap/index.d.ts +2 -0
- package/dist/cjs/components/focus-trap/utils.d.ts +36 -0
- package/dist/cjs/components/focus-trap/utils.js +113 -0
- package/dist/cjs/components/focus-trap/utils.js.map +1 -0
- package/dist/cjs/components/footer/CFooter.js +3 -4
- package/dist/cjs/components/footer/CFooter.js.map +1 -1
- package/dist/cjs/components/form/CForm.js +3 -3
- package/dist/cjs/components/form/CForm.js.map +1 -1
- package/dist/cjs/components/form/CFormCheck.js +16 -19
- package/dist/cjs/components/form/CFormCheck.js.map +1 -1
- package/dist/cjs/components/form/CFormControlValidation.js +2 -4
- package/dist/cjs/components/form/CFormControlValidation.js.map +1 -1
- package/dist/cjs/components/form/CFormControlWrapper.js +3 -5
- package/dist/cjs/components/form/CFormControlWrapper.js.map +1 -1
- package/dist/cjs/components/form/CFormFeedback.js +6 -7
- package/dist/cjs/components/form/CFormFeedback.js.map +1 -1
- package/dist/cjs/components/form/CFormFloating.js +3 -3
- package/dist/cjs/components/form/CFormFloating.js.map +1 -1
- package/dist/cjs/components/form/CFormInput.js +13 -14
- package/dist/cjs/components/form/CFormInput.js.map +1 -1
- package/dist/cjs/components/form/CFormLabel.js +3 -3
- package/dist/cjs/components/form/CFormLabel.js.map +1 -1
- package/dist/cjs/components/form/CFormRange.js +3 -3
- package/dist/cjs/components/form/CFormRange.js.map +1 -1
- package/dist/cjs/components/form/CFormSelect.js +10 -11
- package/dist/cjs/components/form/CFormSelect.js.map +1 -1
- package/dist/cjs/components/form/CFormSwitch.js +10 -12
- package/dist/cjs/components/form/CFormSwitch.js.map +1 -1
- package/dist/cjs/components/form/CFormText.js +3 -3
- package/dist/cjs/components/form/CFormText.js.map +1 -1
- package/dist/cjs/components/form/CFormTextarea.js +4 -4
- package/dist/cjs/components/form/CFormTextarea.js.map +1 -1
- package/dist/cjs/components/form/CInputGroup.js +5 -6
- package/dist/cjs/components/form/CInputGroup.js.map +1 -1
- package/dist/cjs/components/form/CInputGroupText.js +3 -3
- package/dist/cjs/components/form/CInputGroupText.js.map +1 -1
- package/dist/cjs/components/grid/CCol.js +16 -16
- package/dist/cjs/components/grid/CCol.js.map +1 -1
- package/dist/cjs/components/grid/CContainer.js +8 -8
- package/dist/cjs/components/grid/CContainer.js.map +1 -1
- package/dist/cjs/components/grid/CRow.js +13 -13
- package/dist/cjs/components/grid/CRow.js.map +1 -1
- package/dist/cjs/components/header/CHeader.js +3 -4
- package/dist/cjs/components/header/CHeader.js.map +1 -1
- package/dist/cjs/components/header/CHeaderBrand.js +3 -3
- package/dist/cjs/components/header/CHeaderBrand.js.map +1 -1
- package/dist/cjs/components/header/CHeaderDivider.js +3 -3
- package/dist/cjs/components/header/CHeaderDivider.js.map +1 -1
- package/dist/cjs/components/header/CHeaderNav.js +3 -3
- package/dist/cjs/components/header/CHeaderNav.js.map +1 -1
- package/dist/cjs/components/header/CHeaderText.js +3 -3
- package/dist/cjs/components/header/CHeaderText.js.map +1 -1
- package/dist/cjs/components/header/CHeaderToggler.js +3 -3
- package/dist/cjs/components/header/CHeaderToggler.js.map +1 -1
- package/dist/cjs/components/image/CImage.js +9 -10
- package/dist/cjs/components/image/CImage.js.map +1 -1
- package/dist/cjs/components/index.d.ts +1 -0
- package/dist/cjs/components/link/CLink.js +5 -5
- package/dist/cjs/components/link/CLink.js.map +1 -1
- package/dist/cjs/components/list-group/CListGroup.js +6 -8
- package/dist/cjs/components/list-group/CListGroup.js.map +1 -1
- package/dist/cjs/components/list-group/CListGroupItem.js +13 -14
- package/dist/cjs/components/list-group/CListGroupItem.js.map +1 -1
- package/dist/cjs/components/modal/CModal.js +26 -34
- package/dist/cjs/components/modal/CModal.js.map +1 -1
- package/dist/cjs/components/modal/CModalBody.js +3 -3
- package/dist/cjs/components/modal/CModalBody.js.map +1 -1
- package/dist/cjs/components/modal/CModalContent.js +3 -3
- package/dist/cjs/components/modal/CModalContent.js.map +1 -1
- package/dist/cjs/components/modal/CModalContext.js +1 -1
- package/dist/cjs/components/modal/CModalContext.js.map +1 -1
- package/dist/cjs/components/modal/CModalDialog.js +9 -11
- package/dist/cjs/components/modal/CModalDialog.js.map +1 -1
- package/dist/cjs/components/modal/CModalFooter.js +3 -3
- package/dist/cjs/components/modal/CModalFooter.js.map +1 -1
- package/dist/cjs/components/modal/CModalHeader.js +5 -5
- package/dist/cjs/components/modal/CModalHeader.js.map +1 -1
- package/dist/cjs/components/modal/CModalTitle.js +3 -3
- package/dist/cjs/components/modal/CModalTitle.js.map +1 -1
- package/dist/cjs/components/nav/CNav.js +7 -7
- package/dist/cjs/components/nav/CNav.js.map +1 -1
- package/dist/cjs/components/nav/CNavGroup.js +24 -24
- package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
- package/dist/cjs/components/nav/CNavGroupItems.js +3 -3
- package/dist/cjs/components/nav/CNavGroupItems.js.map +1 -1
- package/dist/cjs/components/nav/CNavItem.js +3 -3
- package/dist/cjs/components/nav/CNavItem.js.map +1 -1
- package/dist/cjs/components/nav/CNavLink.js +7 -7
- package/dist/cjs/components/nav/CNavLink.js.map +1 -1
- package/dist/cjs/components/nav/CNavTitle.js +3 -3
- package/dist/cjs/components/nav/CNavTitle.js.map +1 -1
- package/dist/cjs/components/navbar/CNavbar.js +6 -7
- package/dist/cjs/components/navbar/CNavbar.js.map +1 -1
- package/dist/cjs/components/navbar/CNavbarBrand.js +4 -4
- package/dist/cjs/components/navbar/CNavbarBrand.js.map +1 -1
- package/dist/cjs/components/navbar/CNavbarNav.js +3 -3
- package/dist/cjs/components/navbar/CNavbarNav.js.map +1 -1
- package/dist/cjs/components/navbar/CNavbarText.js +3 -3
- package/dist/cjs/components/navbar/CNavbarText.js.map +1 -1
- package/dist/cjs/components/navbar/CNavbarToggler.js +3 -3
- package/dist/cjs/components/navbar/CNavbarToggler.js.map +1 -1
- package/dist/cjs/components/offcanvas/COffcanvas.js +20 -21
- package/dist/cjs/components/offcanvas/COffcanvas.js.map +1 -1
- package/dist/cjs/components/offcanvas/COffcanvasBody.js +3 -3
- package/dist/cjs/components/offcanvas/COffcanvasBody.js.map +1 -1
- package/dist/cjs/components/offcanvas/COffcanvasHeader.js +3 -3
- package/dist/cjs/components/offcanvas/COffcanvasHeader.js.map +1 -1
- package/dist/cjs/components/offcanvas/COffcanvasTitle.js +3 -3
- package/dist/cjs/components/offcanvas/COffcanvasTitle.js.map +1 -1
- package/dist/cjs/components/pagination/CPagination.js +7 -8
- package/dist/cjs/components/pagination/CPagination.js.map +1 -1
- package/dist/cjs/components/pagination/CPaginationItem.js +5 -5
- package/dist/cjs/components/pagination/CPaginationItem.js.map +1 -1
- package/dist/cjs/components/placeholder/CPlaceholder.js +13 -14
- package/dist/cjs/components/placeholder/CPlaceholder.js.map +1 -1
- package/dist/cjs/components/popover/CPopover.js +29 -29
- package/dist/cjs/components/popover/CPopover.js.map +1 -1
- package/dist/cjs/components/progress/CProgress.js +8 -8
- package/dist/cjs/components/progress/CProgress.js.map +1 -1
- package/dist/cjs/components/progress/CProgressBar.js +8 -9
- package/dist/cjs/components/progress/CProgressBar.js.map +1 -1
- package/dist/cjs/components/progress/CProgressStacked.js +3 -3
- package/dist/cjs/components/progress/CProgressStacked.js.map +1 -1
- package/dist/cjs/components/progress/CProgressStackedContext.js +1 -1
- package/dist/cjs/components/progress/CProgressStackedContext.js.map +1 -1
- package/dist/cjs/components/sidebar/CSidebar.js +34 -37
- package/dist/cjs/components/sidebar/CSidebar.js.map +1 -1
- package/dist/cjs/components/sidebar/CSidebarBrand.js +3 -3
- package/dist/cjs/components/sidebar/CSidebarBrand.js.map +1 -1
- package/dist/cjs/components/sidebar/CSidebarFooter.js +3 -3
- package/dist/cjs/components/sidebar/CSidebarFooter.js.map +1 -1
- package/dist/cjs/components/sidebar/CSidebarHeader.js +3 -3
- package/dist/cjs/components/sidebar/CSidebarHeader.js.map +1 -1
- package/dist/cjs/components/sidebar/CSidebarNav.js +14 -14
- package/dist/cjs/components/sidebar/CSidebarNav.js.map +1 -1
- package/dist/cjs/components/sidebar/CSidebarNavContext.js +1 -1
- package/dist/cjs/components/sidebar/CSidebarNavContext.js.map +1 -1
- package/dist/cjs/components/sidebar/CSidebarToggler.js +3 -3
- package/dist/cjs/components/sidebar/CSidebarToggler.js.map +1 -1
- package/dist/cjs/components/spinner/CSpinner.js +6 -7
- package/dist/cjs/components/spinner/CSpinner.js.map +1 -1
- package/dist/cjs/components/table/CTable.js +25 -26
- package/dist/cjs/components/table/CTable.js.map +1 -1
- package/dist/cjs/components/table/CTableBody.js +5 -6
- package/dist/cjs/components/table/CTableBody.js.map +1 -1
- package/dist/cjs/components/table/CTableCaption.js +3 -3
- package/dist/cjs/components/table/CTableCaption.js.map +1 -1
- package/dist/cjs/components/table/CTableDataCell.js +8 -9
- package/dist/cjs/components/table/CTableDataCell.js.map +1 -1
- package/dist/cjs/components/table/CTableFoot.js +5 -6
- package/dist/cjs/components/table/CTableFoot.js.map +1 -1
- package/dist/cjs/components/table/CTableHead.js +5 -6
- package/dist/cjs/components/table/CTableHead.js.map +1 -1
- package/dist/cjs/components/table/CTableHeaderCell.js +5 -6
- package/dist/cjs/components/table/CTableHeaderCell.js.map +1 -1
- package/dist/cjs/components/table/CTableResponsiveWrapper.js +3 -3
- package/dist/cjs/components/table/CTableResponsiveWrapper.js.map +1 -1
- package/dist/cjs/components/table/CTableRow.js +7 -8
- package/dist/cjs/components/table/CTableRow.js.map +1 -1
- package/dist/cjs/components/table/utils.js +9 -13
- package/dist/cjs/components/table/utils.js.map +1 -1
- package/dist/cjs/components/tabs/CTab.js +6 -6
- package/dist/cjs/components/tabs/CTab.js.map +1 -1
- package/dist/cjs/components/tabs/CTabContent.js +3 -3
- package/dist/cjs/components/tabs/CTabContent.js.map +1 -1
- package/dist/cjs/components/tabs/CTabList.js +13 -13
- package/dist/cjs/components/tabs/CTabList.js.map +1 -1
- package/dist/cjs/components/tabs/CTabPane.js +6 -6
- package/dist/cjs/components/tabs/CTabPane.js.map +1 -1
- package/dist/cjs/components/tabs/CTabPanel.js +10 -10
- package/dist/cjs/components/tabs/CTabPanel.js.map +1 -1
- package/dist/cjs/components/tabs/CTabs.js +7 -8
- package/dist/cjs/components/tabs/CTabs.js.map +1 -1
- package/dist/cjs/components/tabs/CTabsContext.js +1 -1
- package/dist/cjs/components/tabs/CTabsContext.js.map +1 -1
- package/dist/cjs/components/toast/CToast.js +21 -25
- package/dist/cjs/components/toast/CToast.js.map +1 -1
- package/dist/cjs/components/toast/CToastBody.js +3 -3
- package/dist/cjs/components/toast/CToastBody.js.map +1 -1
- package/dist/cjs/components/toast/CToastClose.js +5 -5
- package/dist/cjs/components/toast/CToastClose.js.map +1 -1
- package/dist/cjs/components/toast/CToastContext.js +1 -1
- package/dist/cjs/components/toast/CToastContext.js.map +1 -1
- package/dist/cjs/components/toast/CToastHeader.js +3 -3
- package/dist/cjs/components/toast/CToastHeader.js.map +1 -1
- package/dist/cjs/components/toast/CToaster.js +12 -13
- package/dist/cjs/components/toast/CToaster.js.map +1 -1
- package/dist/cjs/components/tooltip/CTooltip.js +30 -30
- package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
- package/dist/cjs/components/widgets/CWidgetStatsA.js +3 -4
- package/dist/cjs/components/widgets/CWidgetStatsA.js.map +1 -1
- package/dist/cjs/components/widgets/CWidgetStatsB.js +4 -4
- package/dist/cjs/components/widgets/CWidgetStatsB.js.map +1 -1
- package/dist/cjs/components/widgets/CWidgetStatsC.js +4 -4
- package/dist/cjs/components/widgets/CWidgetStatsC.js.map +1 -1
- package/dist/cjs/components/widgets/CWidgetStatsD.js +7 -8
- package/dist/cjs/components/widgets/CWidgetStatsD.js.map +1 -1
- package/dist/cjs/components/widgets/CWidgetStatsE.js +3 -3
- package/dist/cjs/components/widgets/CWidgetStatsE.js.map +1 -1
- package/dist/cjs/components/widgets/CWidgetStatsF.js +6 -6
- package/dist/cjs/components/widgets/CWidgetStatsF.js.map +1 -1
- package/dist/cjs/hooks/useClipboard.js +21 -33
- package/dist/cjs/hooks/useClipboard.js.map +1 -1
- package/dist/cjs/hooks/useColorModes.js +15 -20
- package/dist/cjs/hooks/useColorModes.js.map +1 -1
- package/dist/cjs/hooks/useForkedRef.js +6 -10
- package/dist/cjs/hooks/useForkedRef.js.map +1 -1
- package/dist/cjs/hooks/usePopper.js +11 -11
- package/dist/cjs/hooks/usePopper.js.map +1 -1
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/node_modules/tslib/tslib.es6.js +0 -51
- package/dist/cjs/node_modules/tslib/tslib.es6.js.map +1 -1
- package/dist/cjs/props.js +6 -6
- package/dist/cjs/props.js.map +1 -1
- package/dist/cjs/utils/executeAfterTransition.js +8 -10
- package/dist/cjs/utils/executeAfterTransition.js.map +1 -1
- package/dist/cjs/utils/getNextActiveElement.js +3 -3
- package/dist/cjs/utils/getNextActiveElement.js.map +1 -1
- package/dist/cjs/utils/getRTLPlacement.js +1 -1
- package/dist/cjs/utils/getRTLPlacement.js.map +1 -1
- package/dist/cjs/utils/getTransitionDurationFromElement.js +4 -4
- package/dist/cjs/utils/getTransitionDurationFromElement.js.map +1 -1
- package/dist/cjs/utils/isInViewport.js +2 -2
- package/dist/cjs/utils/isInViewport.js.map +1 -1
- package/dist/cjs/utils/isRTL.js +1 -1
- package/dist/cjs/utils/isRTL.js.map +1 -1
- package/dist/esm/components/accordion/CAccordion.js +6 -6
- package/dist/esm/components/accordion/CAccordion.js.map +1 -1
- package/dist/esm/components/accordion/CAccordionBody.js +5 -5
- package/dist/esm/components/accordion/CAccordionBody.js.map +1 -1
- package/dist/esm/components/accordion/CAccordionButton.js +5 -5
- package/dist/esm/components/accordion/CAccordionButton.js.map +1 -1
- package/dist/esm/components/accordion/CAccordionContext.js +1 -1
- package/dist/esm/components/accordion/CAccordionContext.js.map +1 -1
- package/dist/esm/components/accordion/CAccordionHeader.js +4 -4
- package/dist/esm/components/accordion/CAccordionHeader.js.map +1 -1
- package/dist/esm/components/accordion/CAccordionItem.js +12 -12
- package/dist/esm/components/accordion/CAccordionItem.js.map +1 -1
- package/dist/esm/components/accordion/CAccordionItemContext.js +1 -1
- package/dist/esm/components/accordion/CAccordionItemContext.js.map +1 -1
- package/dist/esm/components/alert/CAlert.js +9 -9
- package/dist/esm/components/alert/CAlert.js.map +1 -1
- package/dist/esm/components/alert/CAlertHeading.js +4 -4
- package/dist/esm/components/alert/CAlertHeading.js.map +1 -1
- package/dist/esm/components/alert/CAlertLink.js +4 -4
- package/dist/esm/components/alert/CAlertLink.js.map +1 -1
- package/dist/esm/components/avatar/CAvatar.js +9 -10
- package/dist/esm/components/avatar/CAvatar.js.map +1 -1
- package/dist/esm/components/backdrop/CBackdrop.js +7 -7
- package/dist/esm/components/backdrop/CBackdrop.js.map +1 -1
- package/dist/esm/components/badge/CBadge.js +14 -15
- package/dist/esm/components/badge/CBadge.js.map +1 -1
- package/dist/esm/components/breadcrumb/CBreadcrumb.js +4 -4
- package/dist/esm/components/breadcrumb/CBreadcrumb.js.map +1 -1
- package/dist/esm/components/breadcrumb/CBreadcrumbItem.js +4 -4
- package/dist/esm/components/breadcrumb/CBreadcrumbItem.js.map +1 -1
- package/dist/esm/components/button/CButton.js +9 -10
- package/dist/esm/components/button/CButton.js.map +1 -1
- package/dist/esm/components/button-group/CButtonGroup.js +4 -5
- package/dist/esm/components/button-group/CButtonGroup.js.map +1 -1
- package/dist/esm/components/button-group/CButtonToolbar.js +4 -4
- package/dist/esm/components/button-group/CButtonToolbar.js.map +1 -1
- package/dist/esm/components/callout/CCallout.js +6 -7
- package/dist/esm/components/callout/CCallout.js.map +1 -1
- package/dist/esm/components/card/CCard.js +8 -9
- package/dist/esm/components/card/CCard.js.map +1 -1
- package/dist/esm/components/card/CCardBody.js +4 -4
- package/dist/esm/components/card/CCardBody.js.map +1 -1
- package/dist/esm/components/card/CCardFooter.js +4 -4
- package/dist/esm/components/card/CCardFooter.js.map +1 -1
- package/dist/esm/components/card/CCardGroup.js +4 -4
- package/dist/esm/components/card/CCardGroup.js.map +1 -1
- package/dist/esm/components/card/CCardHeader.js +4 -4
- package/dist/esm/components/card/CCardHeader.js.map +1 -1
- package/dist/esm/components/card/CCardImage.js +4 -4
- package/dist/esm/components/card/CCardImage.js.map +1 -1
- package/dist/esm/components/card/CCardImageOverlay.js +4 -4
- package/dist/esm/components/card/CCardImageOverlay.js.map +1 -1
- package/dist/esm/components/card/CCardLink.js +4 -4
- package/dist/esm/components/card/CCardLink.js.map +1 -1
- package/dist/esm/components/card/CCardSubtitle.js +4 -4
- package/dist/esm/components/card/CCardSubtitle.js.map +1 -1
- package/dist/esm/components/card/CCardText.js +4 -4
- package/dist/esm/components/card/CCardText.js.map +1 -1
- package/dist/esm/components/card/CCardTitle.js +4 -4
- package/dist/esm/components/card/CCardTitle.js.map +1 -1
- package/dist/esm/components/carousel/CCarousel.js +42 -42
- package/dist/esm/components/carousel/CCarousel.js.map +1 -1
- package/dist/esm/components/carousel/CCarouselCaption.js +4 -4
- package/dist/esm/components/carousel/CCarouselCaption.js.map +1 -1
- package/dist/esm/components/carousel/CCarouselContext.js +1 -1
- package/dist/esm/components/carousel/CCarouselContext.js.map +1 -1
- package/dist/esm/components/carousel/CCarouselItem.js +22 -22
- package/dist/esm/components/carousel/CCarouselItem.js.map +1 -1
- package/dist/esm/components/close-button/CCloseButton.js +4 -4
- package/dist/esm/components/close-button/CCloseButton.js.map +1 -1
- package/dist/esm/components/collapse/CCollapse.js +17 -17
- package/dist/esm/components/collapse/CCollapse.js.map +1 -1
- package/dist/esm/components/conditional-portal/CConditionalPortal.js +4 -5
- package/dist/esm/components/conditional-portal/CConditionalPortal.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdown.d.ts +20 -9
- package/dist/esm/components/dropdown/CDropdown.js +91 -71
- package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownContext.d.ts +1 -1
- package/dist/esm/components/dropdown/CDropdownContext.js +1 -1
- package/dist/esm/components/dropdown/CDropdownContext.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownDivider.js +4 -4
- package/dist/esm/components/dropdown/CDropdownDivider.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownHeader.js +4 -4
- package/dist/esm/components/dropdown/CDropdownHeader.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownItem.js +4 -4
- package/dist/esm/components/dropdown/CDropdownItem.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownItemPlain.js +4 -4
- package/dist/esm/components/dropdown/CDropdownItemPlain.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownMenu.js +7 -7
- package/dist/esm/components/dropdown/CDropdownMenu.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownToggle.d.ts +7 -3
- package/dist/esm/components/dropdown/CDropdownToggle.js +19 -14
- package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
- package/dist/esm/components/dropdown/utils.js +7 -7
- package/dist/esm/components/dropdown/utils.js.map +1 -1
- package/dist/esm/components/focus-trap/CFocusTrap.d.ts +59 -0
- package/dist/esm/components/focus-trap/CFocusTrap.js +160 -0
- package/dist/esm/components/focus-trap/CFocusTrap.js.map +1 -0
- package/dist/esm/components/focus-trap/index.d.ts +2 -0
- package/dist/esm/components/focus-trap/utils.d.ts +36 -0
- package/dist/esm/components/focus-trap/utils.js +107 -0
- package/dist/esm/components/focus-trap/utils.js.map +1 -0
- package/dist/esm/components/footer/CFooter.js +4 -5
- package/dist/esm/components/footer/CFooter.js.map +1 -1
- package/dist/esm/components/form/CForm.js +4 -4
- package/dist/esm/components/form/CForm.js.map +1 -1
- package/dist/esm/components/form/CFormCheck.js +17 -20
- package/dist/esm/components/form/CFormCheck.js.map +1 -1
- package/dist/esm/components/form/CFormControlValidation.js +2 -4
- package/dist/esm/components/form/CFormControlValidation.js.map +1 -1
- package/dist/esm/components/form/CFormControlWrapper.js +3 -5
- package/dist/esm/components/form/CFormControlWrapper.js.map +1 -1
- package/dist/esm/components/form/CFormFeedback.js +7 -8
- package/dist/esm/components/form/CFormFeedback.js.map +1 -1
- package/dist/esm/components/form/CFormFloating.js +4 -4
- package/dist/esm/components/form/CFormFloating.js.map +1 -1
- package/dist/esm/components/form/CFormInput.js +14 -15
- package/dist/esm/components/form/CFormInput.js.map +1 -1
- package/dist/esm/components/form/CFormLabel.js +4 -4
- package/dist/esm/components/form/CFormLabel.js.map +1 -1
- package/dist/esm/components/form/CFormRange.js +4 -4
- package/dist/esm/components/form/CFormRange.js.map +1 -1
- package/dist/esm/components/form/CFormSelect.js +11 -12
- package/dist/esm/components/form/CFormSelect.js.map +1 -1
- package/dist/esm/components/form/CFormSwitch.js +11 -13
- package/dist/esm/components/form/CFormSwitch.js.map +1 -1
- package/dist/esm/components/form/CFormText.js +4 -4
- package/dist/esm/components/form/CFormText.js.map +1 -1
- package/dist/esm/components/form/CFormTextarea.js +5 -5
- package/dist/esm/components/form/CFormTextarea.js.map +1 -1
- package/dist/esm/components/form/CInputGroup.js +6 -7
- package/dist/esm/components/form/CInputGroup.js.map +1 -1
- package/dist/esm/components/form/CInputGroupText.js +4 -4
- package/dist/esm/components/form/CInputGroupText.js.map +1 -1
- package/dist/esm/components/grid/CCol.js +17 -17
- package/dist/esm/components/grid/CCol.js.map +1 -1
- package/dist/esm/components/grid/CContainer.js +9 -9
- package/dist/esm/components/grid/CContainer.js.map +1 -1
- package/dist/esm/components/grid/CRow.js +14 -14
- package/dist/esm/components/grid/CRow.js.map +1 -1
- package/dist/esm/components/header/CHeader.js +4 -5
- package/dist/esm/components/header/CHeader.js.map +1 -1
- package/dist/esm/components/header/CHeaderBrand.js +4 -4
- package/dist/esm/components/header/CHeaderBrand.js.map +1 -1
- package/dist/esm/components/header/CHeaderDivider.js +4 -4
- package/dist/esm/components/header/CHeaderDivider.js.map +1 -1
- package/dist/esm/components/header/CHeaderNav.js +4 -4
- package/dist/esm/components/header/CHeaderNav.js.map +1 -1
- package/dist/esm/components/header/CHeaderText.js +4 -4
- package/dist/esm/components/header/CHeaderText.js.map +1 -1
- package/dist/esm/components/header/CHeaderToggler.js +4 -4
- package/dist/esm/components/header/CHeaderToggler.js.map +1 -1
- package/dist/esm/components/image/CImage.js +10 -11
- package/dist/esm/components/image/CImage.js.map +1 -1
- package/dist/esm/components/index.d.ts +1 -0
- package/dist/esm/components/link/CLink.js +6 -6
- package/dist/esm/components/link/CLink.js.map +1 -1
- package/dist/esm/components/list-group/CListGroup.js +7 -9
- package/dist/esm/components/list-group/CListGroup.js.map +1 -1
- package/dist/esm/components/list-group/CListGroupItem.js +14 -15
- package/dist/esm/components/list-group/CListGroupItem.js.map +1 -1
- package/dist/esm/components/modal/CModal.js +27 -35
- package/dist/esm/components/modal/CModal.js.map +1 -1
- package/dist/esm/components/modal/CModalBody.js +4 -4
- package/dist/esm/components/modal/CModalBody.js.map +1 -1
- package/dist/esm/components/modal/CModalContent.js +4 -4
- package/dist/esm/components/modal/CModalContent.js.map +1 -1
- package/dist/esm/components/modal/CModalContext.js +1 -1
- package/dist/esm/components/modal/CModalContext.js.map +1 -1
- package/dist/esm/components/modal/CModalDialog.js +10 -12
- package/dist/esm/components/modal/CModalDialog.js.map +1 -1
- package/dist/esm/components/modal/CModalFooter.js +4 -4
- package/dist/esm/components/modal/CModalFooter.js.map +1 -1
- package/dist/esm/components/modal/CModalHeader.js +6 -6
- package/dist/esm/components/modal/CModalHeader.js.map +1 -1
- package/dist/esm/components/modal/CModalTitle.js +4 -4
- package/dist/esm/components/modal/CModalTitle.js.map +1 -1
- package/dist/esm/components/nav/CNav.js +8 -8
- package/dist/esm/components/nav/CNav.js.map +1 -1
- package/dist/esm/components/nav/CNavGroup.js +25 -25
- package/dist/esm/components/nav/CNavGroup.js.map +1 -1
- package/dist/esm/components/nav/CNavGroupItems.js +4 -4
- package/dist/esm/components/nav/CNavGroupItems.js.map +1 -1
- package/dist/esm/components/nav/CNavItem.js +4 -4
- package/dist/esm/components/nav/CNavItem.js.map +1 -1
- package/dist/esm/components/nav/CNavLink.js +8 -8
- package/dist/esm/components/nav/CNavLink.js.map +1 -1
- package/dist/esm/components/nav/CNavTitle.js +4 -4
- package/dist/esm/components/nav/CNavTitle.js.map +1 -1
- package/dist/esm/components/navbar/CNavbar.js +7 -8
- package/dist/esm/components/navbar/CNavbar.js.map +1 -1
- package/dist/esm/components/navbar/CNavbarBrand.js +5 -5
- package/dist/esm/components/navbar/CNavbarBrand.js.map +1 -1
- package/dist/esm/components/navbar/CNavbarNav.js +4 -4
- package/dist/esm/components/navbar/CNavbarNav.js.map +1 -1
- package/dist/esm/components/navbar/CNavbarText.js +4 -4
- package/dist/esm/components/navbar/CNavbarText.js.map +1 -1
- package/dist/esm/components/navbar/CNavbarToggler.js +4 -4
- package/dist/esm/components/navbar/CNavbarToggler.js.map +1 -1
- package/dist/esm/components/offcanvas/COffcanvas.js +21 -22
- package/dist/esm/components/offcanvas/COffcanvas.js.map +1 -1
- package/dist/esm/components/offcanvas/COffcanvasBody.js +4 -4
- package/dist/esm/components/offcanvas/COffcanvasBody.js.map +1 -1
- package/dist/esm/components/offcanvas/COffcanvasHeader.js +4 -4
- package/dist/esm/components/offcanvas/COffcanvasHeader.js.map +1 -1
- package/dist/esm/components/offcanvas/COffcanvasTitle.js +4 -4
- package/dist/esm/components/offcanvas/COffcanvasTitle.js.map +1 -1
- package/dist/esm/components/pagination/CPagination.js +8 -9
- package/dist/esm/components/pagination/CPagination.js.map +1 -1
- package/dist/esm/components/pagination/CPaginationItem.js +6 -6
- package/dist/esm/components/pagination/CPaginationItem.js.map +1 -1
- package/dist/esm/components/placeholder/CPlaceholder.js +14 -15
- package/dist/esm/components/placeholder/CPlaceholder.js.map +1 -1
- package/dist/esm/components/popover/CPopover.js +30 -30
- package/dist/esm/components/popover/CPopover.js.map +1 -1
- package/dist/esm/components/progress/CProgress.js +9 -9
- package/dist/esm/components/progress/CProgress.js.map +1 -1
- package/dist/esm/components/progress/CProgressBar.js +9 -10
- package/dist/esm/components/progress/CProgressBar.js.map +1 -1
- package/dist/esm/components/progress/CProgressStacked.js +4 -4
- package/dist/esm/components/progress/CProgressStacked.js.map +1 -1
- package/dist/esm/components/progress/CProgressStackedContext.js +1 -1
- package/dist/esm/components/progress/CProgressStackedContext.js.map +1 -1
- package/dist/esm/components/sidebar/CSidebar.js +35 -38
- package/dist/esm/components/sidebar/CSidebar.js.map +1 -1
- package/dist/esm/components/sidebar/CSidebarBrand.js +4 -4
- package/dist/esm/components/sidebar/CSidebarBrand.js.map +1 -1
- package/dist/esm/components/sidebar/CSidebarFooter.js +4 -4
- package/dist/esm/components/sidebar/CSidebarFooter.js.map +1 -1
- package/dist/esm/components/sidebar/CSidebarHeader.js +4 -4
- package/dist/esm/components/sidebar/CSidebarHeader.js.map +1 -1
- package/dist/esm/components/sidebar/CSidebarNav.js +15 -15
- package/dist/esm/components/sidebar/CSidebarNav.js.map +1 -1
- package/dist/esm/components/sidebar/CSidebarNavContext.js +1 -1
- package/dist/esm/components/sidebar/CSidebarNavContext.js.map +1 -1
- package/dist/esm/components/sidebar/CSidebarToggler.js +4 -4
- package/dist/esm/components/sidebar/CSidebarToggler.js.map +1 -1
- package/dist/esm/components/spinner/CSpinner.js +7 -8
- package/dist/esm/components/spinner/CSpinner.js.map +1 -1
- package/dist/esm/components/table/CTable.js +26 -27
- package/dist/esm/components/table/CTable.js.map +1 -1
- package/dist/esm/components/table/CTableBody.js +6 -7
- package/dist/esm/components/table/CTableBody.js.map +1 -1
- package/dist/esm/components/table/CTableCaption.js +4 -4
- package/dist/esm/components/table/CTableCaption.js.map +1 -1
- package/dist/esm/components/table/CTableDataCell.js +9 -10
- package/dist/esm/components/table/CTableDataCell.js.map +1 -1
- package/dist/esm/components/table/CTableFoot.js +6 -7
- package/dist/esm/components/table/CTableFoot.js.map +1 -1
- package/dist/esm/components/table/CTableHead.js +6 -7
- package/dist/esm/components/table/CTableHead.js.map +1 -1
- package/dist/esm/components/table/CTableHeaderCell.js +6 -7
- package/dist/esm/components/table/CTableHeaderCell.js.map +1 -1
- package/dist/esm/components/table/CTableResponsiveWrapper.js +4 -4
- package/dist/esm/components/table/CTableResponsiveWrapper.js.map +1 -1
- package/dist/esm/components/table/CTableRow.js +8 -9
- package/dist/esm/components/table/CTableRow.js.map +1 -1
- package/dist/esm/components/table/utils.js +9 -13
- package/dist/esm/components/table/utils.js.map +1 -1
- package/dist/esm/components/tabs/CTab.js +7 -7
- package/dist/esm/components/tabs/CTab.js.map +1 -1
- package/dist/esm/components/tabs/CTabContent.js +4 -4
- package/dist/esm/components/tabs/CTabContent.js.map +1 -1
- package/dist/esm/components/tabs/CTabList.js +14 -14
- package/dist/esm/components/tabs/CTabList.js.map +1 -1
- package/dist/esm/components/tabs/CTabPane.js +7 -7
- package/dist/esm/components/tabs/CTabPane.js.map +1 -1
- package/dist/esm/components/tabs/CTabPanel.js +11 -11
- package/dist/esm/components/tabs/CTabPanel.js.map +1 -1
- package/dist/esm/components/tabs/CTabs.js +7 -8
- package/dist/esm/components/tabs/CTabs.js.map +1 -1
- package/dist/esm/components/tabs/CTabsContext.js +1 -1
- package/dist/esm/components/tabs/CTabsContext.js.map +1 -1
- package/dist/esm/components/toast/CToast.js +22 -26
- package/dist/esm/components/toast/CToast.js.map +1 -1
- package/dist/esm/components/toast/CToastBody.js +4 -4
- package/dist/esm/components/toast/CToastBody.js.map +1 -1
- package/dist/esm/components/toast/CToastClose.js +6 -6
- package/dist/esm/components/toast/CToastClose.js.map +1 -1
- package/dist/esm/components/toast/CToastContext.js +1 -1
- package/dist/esm/components/toast/CToastContext.js.map +1 -1
- package/dist/esm/components/toast/CToastHeader.js +4 -4
- package/dist/esm/components/toast/CToastHeader.js.map +1 -1
- package/dist/esm/components/toast/CToaster.js +13 -14
- package/dist/esm/components/toast/CToaster.js.map +1 -1
- package/dist/esm/components/tooltip/CTooltip.js +31 -31
- package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
- package/dist/esm/components/widgets/CWidgetStatsA.js +4 -5
- package/dist/esm/components/widgets/CWidgetStatsA.js.map +1 -1
- package/dist/esm/components/widgets/CWidgetStatsB.js +5 -5
- package/dist/esm/components/widgets/CWidgetStatsB.js.map +1 -1
- package/dist/esm/components/widgets/CWidgetStatsC.js +5 -5
- package/dist/esm/components/widgets/CWidgetStatsC.js.map +1 -1
- package/dist/esm/components/widgets/CWidgetStatsD.js +8 -9
- package/dist/esm/components/widgets/CWidgetStatsD.js.map +1 -1
- package/dist/esm/components/widgets/CWidgetStatsE.js +4 -4
- package/dist/esm/components/widgets/CWidgetStatsE.js.map +1 -1
- package/dist/esm/components/widgets/CWidgetStatsF.js +7 -7
- package/dist/esm/components/widgets/CWidgetStatsF.js.map +1 -1
- package/dist/esm/hooks/useClipboard.js +22 -34
- package/dist/esm/hooks/useClipboard.js.map +1 -1
- package/dist/esm/hooks/useColorModes.js +15 -20
- package/dist/esm/hooks/useColorModes.js.map +1 -1
- package/dist/esm/hooks/useForkedRef.js +6 -10
- package/dist/esm/hooks/useForkedRef.js.map +1 -1
- package/dist/esm/hooks/usePopper.js +11 -11
- package/dist/esm/hooks/usePopper.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/node_modules/tslib/tslib.es6.js +1 -50
- package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -1
- package/dist/esm/props.js +6 -6
- package/dist/esm/props.js.map +1 -1
- package/dist/esm/utils/executeAfterTransition.js +8 -10
- package/dist/esm/utils/executeAfterTransition.js.map +1 -1
- package/dist/esm/utils/getNextActiveElement.js +3 -3
- package/dist/esm/utils/getNextActiveElement.js.map +1 -1
- package/dist/esm/utils/getRTLPlacement.js +1 -1
- package/dist/esm/utils/getRTLPlacement.js.map +1 -1
- package/dist/esm/utils/getTransitionDurationFromElement.js +4 -4
- package/dist/esm/utils/getTransitionDurationFromElement.js.map +1 -1
- package/dist/esm/utils/isInViewport.js +2 -2
- package/dist/esm/utils/isInViewport.js.map +1 -1
- package/dist/esm/utils/isRTL.js +1 -1
- package/dist/esm/utils/isRTL.js.map +1 -1
- package/package.json +11 -11
- package/src/components/accordion/CAccordion.tsx +1 -1
- package/src/components/accordion/CAccordionHeader.tsx +1 -1
- package/src/components/alert/CAlert.tsx +3 -3
- package/src/components/alert/CAlertHeading.tsx +1 -1
- package/src/components/alert/CAlertLink.tsx +1 -1
- package/src/components/alert/__tests__/CAlertHeading.spec.tsx +1 -1
- package/src/components/alert/__tests__/CAlertLink.spec.tsx +1 -1
- package/src/components/avatar/CAvatar.tsx +2 -2
- package/src/components/avatar/__tests__/CAvatar.spec.tsx +2 -2
- package/src/components/backdrop/CBackdrop.tsx +1 -1
- package/src/components/backdrop/__tests__/CBackdrop.spec.tsx +1 -1
- package/src/components/badge/CBadge.tsx +3 -3
- package/src/components/badge/__tests__/CBadge.spec.tsx +1 -1
- package/src/components/breadcrumb/CBreadcrumb.tsx +1 -1
- package/src/components/breadcrumb/CBreadcrumbItem.tsx +2 -2
- package/src/components/breadcrumb/__tests__/CBreadcrumb.spec.tsx +1 -1
- package/src/components/breadcrumb/__tests__/CBreadcrumbItem.spec.tsx +1 -1
- package/src/components/button/__tests__/CButton.spec.tsx +2 -2
- package/src/components/button-group/CButtonGroup.tsx +2 -2
- package/src/components/button-group/CButtonToolbar.tsx +1 -1
- package/src/components/button-group/__tests__/CButtonGroup.spec.tsx +2 -2
- package/src/components/button-group/__tests__/CButtonToolbar.spec.tsx +1 -1
- package/src/components/callout/CCallout.tsx +2 -2
- package/src/components/callout/__tests__/CCallout.spec.tsx +1 -1
- package/src/components/card/CCard.tsx +2 -2
- package/src/components/card/CCardBody.tsx +1 -1
- package/src/components/card/CCardFooter.tsx +1 -1
- package/src/components/card/CCardGroup.tsx +1 -1
- package/src/components/card/CCardImageOverlay.tsx +1 -1
- package/src/components/card/CCardLink.tsx +1 -1
- package/src/components/card/CCardSubtitle.tsx +1 -1
- package/src/components/card/__tests__/CCard.spec.tsx +1 -1
- package/src/components/card/__tests__/CCardGroup.spec.tsx +1 -1
- package/src/components/card/__tests__/CCardHeader.spec.tsx +1 -1
- package/src/components/card/__tests__/CCardLink.spec.tsx +1 -1
- package/src/components/card/__tests__/CCardSubtitle.spec.tsx +1 -1
- package/src/components/card/__tests__/CCardText.spec.tsx +1 -1
- package/src/components/card/__tests__/CCardTitle.spec.tsx +1 -1
- package/src/components/carousel/__tests__/CCarousel.spec.tsx +3 -3
- package/src/components/close-button/CCloseButton.tsx +2 -2
- package/src/components/collapse/CCollapse.tsx +1 -1
- package/src/components/dropdown/CDropdown.tsx +107 -65
- package/src/components/dropdown/CDropdownContext.ts +1 -1
- package/src/components/dropdown/CDropdownToggle.tsx +13 -3
- package/src/components/dropdown/__tests__/CDropdown.spec.tsx +3 -3
- package/src/components/dropdown/__tests__/CDropdownHeader.spec.tsx +1 -1
- package/src/components/dropdown/__tests__/CDropdownItem.spec.tsx +1 -1
- package/src/components/dropdown/__tests__/CDropdownItemPlain.spec.tsx +1 -1
- package/src/components/dropdown/__tests__/CDropdownMenu.spec.tsx +1 -1
- package/src/components/dropdown/__tests__/CDropdownToggle.spec.tsx +1 -1
- package/src/components/dropdown/utils.ts +2 -2
- package/src/components/focus-trap/CFocusTrap.tsx +254 -0
- package/src/components/focus-trap/__tests__/CFocusTrap.spec.tsx +232 -0
- package/src/components/focus-trap/__tests__/__snapshots__/CFocusTrap.spec.tsx.snap +21 -0
- package/src/components/focus-trap/index.ts +3 -0
- package/src/components/focus-trap/utils.ts +121 -0
- package/src/components/footer/CFooter.tsx +1 -1
- package/src/components/footer/__tests__/CFooter.spec.tsx +1 -1
- package/src/components/form/CForm.tsx +1 -1
- package/src/components/form/CFormCheck.tsx +5 -5
- package/src/components/form/CFormFeedback.tsx +2 -2
- package/src/components/form/CFormFloating.tsx +1 -1
- package/src/components/form/CFormInput.tsx +4 -4
- package/src/components/form/CFormLabel.tsx +1 -1
- package/src/components/form/CFormRange.tsx +1 -1
- package/src/components/form/CFormSelect.tsx +3 -3
- package/src/components/form/CFormSwitch.tsx +2 -2
- package/src/components/form/CFormTextarea.tsx +3 -3
- package/src/components/form/CInputGroup.tsx +2 -2
- package/src/components/form/CInputGroupText.tsx +1 -1
- package/src/components/form/__tests__/CForm.spec.tsx +2 -2
- package/src/components/form/__tests__/CFormCheck.spec.tsx +2 -2
- package/src/components/form/__tests__/CFormControl.spec.tsx +1 -1
- package/src/components/form/__tests__/CFormFeedback.spec.tsx +2 -2
- package/src/components/form/__tests__/CFormInput.spec.tsx +1 -1
- package/src/components/form/__tests__/CFormRange.spec.tsx +1 -1
- package/src/components/form/__tests__/CFormSelect.spec.tsx +1 -1
- package/src/components/form/__tests__/CFormSwitch.spec.tsx +1 -1
- package/src/components/form/__tests__/CFormText.spec.tsx +1 -1
- package/src/components/form/__tests__/CFormTextarea.spec.tsx +1 -1
- package/src/components/form/__tests__/CInputGroup.spec.tsx +1 -1
- package/src/components/form/__tests__/CInputGroupText.spec.tsx +1 -1
- package/src/components/grid/CCol.tsx +2 -2
- package/src/components/grid/CContainer.tsx +2 -2
- package/src/components/grid/CRow.tsx +1 -1
- package/src/components/grid/__tests__/CCol.spec.tsx +2 -2
- package/src/components/grid/__tests__/CContainer.spec.tsx +2 -2
- package/src/components/grid/__tests__/CRow.spec.tsx +5 -5
- package/src/components/header/CHeader.tsx +1 -1
- package/src/components/header/CHeaderDivider.tsx +1 -1
- package/src/components/header/CHeaderText.tsx +1 -1
- package/src/components/header/CHeaderToggler.tsx +1 -1
- package/src/components/header/__tests__/CHeader.spec.tsx +1 -1
- package/src/components/header/__tests__/CHeaderBrand.spec.tsx +1 -1
- package/src/components/header/__tests__/CHeaderNav.spec.tsx +1 -1
- package/src/components/image/CImage.tsx +2 -2
- package/src/components/image/__tests__/CImage.spec.tsx +1 -1
- package/src/components/index.ts +1 -0
- package/src/components/link/__tests__/CLink.spec.tsx +3 -3
- package/src/components/list-group/CListGroup.tsx +1 -1
- package/src/components/list-group/CListGroupItem.tsx +2 -2
- package/src/components/list-group/__tests__/CListGroup.spec.tsx +2 -2
- package/src/components/list-group/__tests__/CListGroupItem.spec.tsx +1 -1
- package/src/components/modal/CModal.tsx +5 -13
- package/src/components/modal/CModalBody.tsx +1 -1
- package/src/components/modal/CModalContent.tsx +1 -1
- package/src/components/modal/CModalDialog.tsx +2 -2
- package/src/components/modal/CModalFooter.tsx +1 -1
- package/src/components/modal/CModalHeader.tsx +1 -1
- package/src/components/modal/__tests__/CModal.spec.tsx +2 -2
- package/src/components/modal/__tests__/CModalDialog.spec.tsx +1 -1
- package/src/components/modal/__tests__/CModalTitle.spec.tsx +1 -1
- package/src/components/nav/CNavGroup.tsx +2 -2
- package/src/components/nav/CNavGroupItems.tsx +1 -1
- package/src/components/nav/__tests__/CNavGroup.spec.tsx +1 -1
- package/src/components/nav/__tests__/CNavItem.spec.tsx +1 -1
- package/src/components/nav/__tests__/CNavLink.spec.tsx +1 -1
- package/src/components/navbar/CNavbar.tsx +3 -3
- package/src/components/navbar/CNavbarText.tsx +1 -1
- package/src/components/navbar/CNavbarToggler.tsx +1 -1
- package/src/components/navbar/__tests__/CNavbar.spec.tsx +2 -2
- package/src/components/navbar/__tests__/CNavbarBrand.spec.tsx +1 -1
- package/src/components/navbar/__tests__/CNavbarNav.spec.tsx +1 -1
- package/src/components/offcanvas/COffcanvas.tsx +26 -24
- package/src/components/offcanvas/COffcanvasBody.tsx +1 -1
- package/src/components/offcanvas/COffcanvasHeader.tsx +1 -1
- package/src/components/offcanvas/COffcanvasTitle.tsx +1 -1
- package/src/components/offcanvas/__tests__/COffcanvasTitle.spec.tsx +1 -1
- package/src/components/pagination/CPagination.tsx +2 -2
- package/src/components/pagination/CPaginationItem.tsx +2 -2
- package/src/components/pagination/__tests__/CPagination.spec.tsx +2 -2
- package/src/components/pagination/__tests__/CPaginationItem.spec.tsx +1 -1
- package/src/components/placeholder/CPlaceholder.tsx +2 -2
- package/src/components/placeholder/__tests__/CPlaceholder.spec.tsx +1 -1
- package/src/components/progress/CProgress.tsx +3 -3
- package/src/components/progress/CProgressBar.tsx +2 -2
- package/src/components/progress/__tests__/CProgress.spec.tsx +1 -1
- package/src/components/progress/__tests__/CProgressBar.spec.tsx +1 -1
- package/src/components/sidebar/CSidebarFooter.tsx +1 -1
- package/src/components/sidebar/CSidebarHeader.tsx +1 -1
- package/src/components/sidebar/CSidebarToggler.tsx +1 -1
- package/src/components/sidebar/__tests__/CSidebar.spec.tsx +2 -2
- package/src/components/spinner/CSpinner.tsx +3 -3
- package/src/components/spinner/__tests__/CSpinner.spec.tsx +1 -1
- package/src/components/table/CTable.tsx +3 -3
- package/src/components/table/CTableBody.tsx +2 -2
- package/src/components/table/CTableDataCell.tsx +2 -2
- package/src/components/table/CTableFoot.tsx +2 -2
- package/src/components/table/CTableHead.tsx +2 -2
- package/src/components/table/CTableHeaderCell.tsx +2 -2
- package/src/components/table/CTableRow.tsx +2 -2
- package/src/components/table/__tests__/CTable.spec.tsx +2 -2
- package/src/components/table/__tests__/CTableBody.spec.tsx +1 -1
- package/src/components/table/__tests__/CTableDataCell.spec.tsx +2 -2
- package/src/components/table/__tests__/CTableFoot.spec.tsx +1 -1
- package/src/components/table/__tests__/CTableHead.spec.tsx +1 -1
- package/src/components/table/__tests__/CTableHeaderCell.spec.tsx +2 -2
- package/src/components/table/__tests__/CTableRow.spec.tsx +2 -2
- package/src/components/tabs/CTab.tsx +2 -2
- package/src/components/tabs/CTabContent.tsx +1 -1
- package/src/components/tabs/CTabPane.tsx +2 -2
- package/src/components/tabs/CTabPanel.tsx +2 -2
- package/src/components/toast/CToastBody.tsx +1 -1
- package/src/components/toast/CToastHeader.tsx +1 -1
- package/src/components/toast/__tests__/CToaster.spec.tsx +2 -2
- package/src/components/widgets/CWidgetStatsA.tsx +1 -1
- package/src/components/widgets/CWidgetStatsB.tsx +1 -1
- package/src/components/widgets/CWidgetStatsC.tsx +2 -2
- package/src/components/widgets/CWidgetStatsD.tsx +2 -2
- package/src/components/widgets/CWidgetStatsE.tsx +1 -1
- package/src/components/widgets/CWidgetStatsF.tsx +1 -1
- package/src/components/widgets/__tests__/CWidgetStatsA.spec.tsx +1 -1
- package/src/components/widgets/__tests__/CWidgetStatsB.spec.tsx +1 -1
- package/src/components/widgets/__tests__/CWidgetStatsC.spec.tsx +1 -1
- package/src/components/widgets/__tests__/CWidgetStatsD.spec.tsx +1 -1
- package/src/components/widgets/__tests__/CWidgetStatsE.spec.tsx +1 -1
- package/src/components/widgets/__tests__/CWidgetStatsF.spec.tsx +2 -2
- package/src/helpers/polymorphicComponent.ts +1 -1
- package/src/utils/executeAfterTransition.ts +1 -1
- package/src/utils/getNextActiveElement.ts +1 -1
- package/src/utils/mergeClassNames.ts +1 -1
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
import { render, screen } from '@testing-library/react'
|
|
3
|
+
import '@testing-library/jest-dom'
|
|
4
|
+
import { CFocusTrap } from '../CFocusTrap'
|
|
5
|
+
|
|
6
|
+
// Helper function to create a test component with focusable elements
|
|
7
|
+
interface TestComponentProps {
|
|
8
|
+
children?: React.ReactNode
|
|
9
|
+
[key: string]: any
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const TestComponent = ({ children, ...props }: TestComponentProps) => (
|
|
13
|
+
<CFocusTrap {...props}>
|
|
14
|
+
<div data-testid="container">
|
|
15
|
+
<button data-testid="first-button">First</button>
|
|
16
|
+
<input data-testid="input" type="text" placeholder="Input field" />
|
|
17
|
+
<a href="#" data-testid="link">
|
|
18
|
+
Link
|
|
19
|
+
</a>
|
|
20
|
+
<button data-testid="last-button">Last</button>
|
|
21
|
+
{children}
|
|
22
|
+
</div>
|
|
23
|
+
</CFocusTrap>
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
describe('CFocusTrap', () => {
|
|
27
|
+
beforeEach(() => {
|
|
28
|
+
// Reset document focus before each test
|
|
29
|
+
document.body.focus()
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
test('loads and displays CFocusTrap component', () => {
|
|
33
|
+
const { container } = render(
|
|
34
|
+
<CFocusTrap>
|
|
35
|
+
<div data-testid="test-content">Test Content</div>
|
|
36
|
+
</CFocusTrap>
|
|
37
|
+
)
|
|
38
|
+
expect(container).toMatchSnapshot()
|
|
39
|
+
expect(screen.getByTestId('test-content')).toBeInTheDocument()
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
test('CFocusTrap with custom props', () => {
|
|
43
|
+
const onActivate = jest.fn()
|
|
44
|
+
const onDeactivate = jest.fn()
|
|
45
|
+
|
|
46
|
+
const { container } = render(
|
|
47
|
+
<CFocusTrap
|
|
48
|
+
active={true}
|
|
49
|
+
restoreFocus={false}
|
|
50
|
+
focusFirstElement={false}
|
|
51
|
+
onActivate={onActivate}
|
|
52
|
+
onDeactivate={onDeactivate}
|
|
53
|
+
>
|
|
54
|
+
<div data-testid="custom-container">Custom Content</div>
|
|
55
|
+
</CFocusTrap>
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
expect(container).toMatchSnapshot()
|
|
59
|
+
expect(onActivate).toHaveBeenCalledTimes(1)
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
test('focuses container when focusFirstElement is false (default)', () => {
|
|
63
|
+
const mockFocus = jest.fn()
|
|
64
|
+
const originalFocus = HTMLElement.prototype.focus
|
|
65
|
+
HTMLElement.prototype.focus = mockFocus
|
|
66
|
+
|
|
67
|
+
render(<TestComponent active={true} />)
|
|
68
|
+
|
|
69
|
+
const container = screen.getByTestId('container')
|
|
70
|
+
expect(container).toBeInTheDocument()
|
|
71
|
+
expect(mockFocus).toHaveBeenCalledWith({ preventScroll: true })
|
|
72
|
+
|
|
73
|
+
HTMLElement.prototype.focus = originalFocus
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
test('does not trap focus when active is false', () => {
|
|
77
|
+
render(<TestComponent active={false} />)
|
|
78
|
+
|
|
79
|
+
// Focus should not be moved to any element
|
|
80
|
+
expect(screen.getByTestId('container')).not.toHaveFocus()
|
|
81
|
+
expect(screen.getByTestId('first-button')).not.toHaveFocus()
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
test('handles container with no tabbable elements', () => {
|
|
85
|
+
const mockFocus = jest.fn()
|
|
86
|
+
const originalFocus = HTMLElement.prototype.focus
|
|
87
|
+
HTMLElement.prototype.focus = mockFocus
|
|
88
|
+
|
|
89
|
+
render(
|
|
90
|
+
<CFocusTrap active={true}>
|
|
91
|
+
<div data-testid="empty-container">No focusable elements</div>
|
|
92
|
+
</CFocusTrap>
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
const container = screen.getByTestId('empty-container')
|
|
96
|
+
expect(container).toBeInTheDocument()
|
|
97
|
+
expect(mockFocus).toHaveBeenCalledWith({ preventScroll: true })
|
|
98
|
+
|
|
99
|
+
HTMLElement.prototype.focus = originalFocus
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
test('calls onActivate callback when trap becomes active', () => {
|
|
103
|
+
const onActivate = jest.fn()
|
|
104
|
+
|
|
105
|
+
const { rerender } = render(<TestComponent active={false} onActivate={onActivate} />)
|
|
106
|
+
expect(onActivate).not.toHaveBeenCalled()
|
|
107
|
+
|
|
108
|
+
// Re-render with active=true
|
|
109
|
+
rerender(<TestComponent active={true} onActivate={onActivate} />)
|
|
110
|
+
expect(onActivate).toHaveBeenCalledTimes(1)
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
test('calls onDeactivate callback when trap becomes inactive', () => {
|
|
114
|
+
const onDeactivate = jest.fn()
|
|
115
|
+
|
|
116
|
+
const { rerender } = render(<TestComponent active={true} onDeactivate={onDeactivate} />)
|
|
117
|
+
expect(onDeactivate).not.toHaveBeenCalled()
|
|
118
|
+
|
|
119
|
+
// Deactivate the trap
|
|
120
|
+
rerender(<TestComponent active={false} onDeactivate={onDeactivate} />)
|
|
121
|
+
expect(onDeactivate).toHaveBeenCalledTimes(1)
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
test('cleans up event listeners on unmount', () => {
|
|
125
|
+
const removeEventListenerSpy = jest.spyOn(document, 'removeEventListener')
|
|
126
|
+
|
|
127
|
+
const { unmount } = render(<TestComponent active={true} />)
|
|
128
|
+
|
|
129
|
+
unmount()
|
|
130
|
+
|
|
131
|
+
expect(removeEventListenerSpy).toHaveBeenCalledWith('focusin', expect.any(Function), true)
|
|
132
|
+
|
|
133
|
+
removeEventListenerSpy.mockRestore()
|
|
134
|
+
})
|
|
135
|
+
|
|
136
|
+
test('focuses first element when focusFirstElement is true', () => {
|
|
137
|
+
const mockFocus = jest.fn()
|
|
138
|
+
const originalFocus = HTMLElement.prototype.focus
|
|
139
|
+
HTMLElement.prototype.focus = mockFocus
|
|
140
|
+
|
|
141
|
+
render(<TestComponent active={true} focusFirstElement={true} />)
|
|
142
|
+
|
|
143
|
+
const firstButton = screen.getByTestId('first-button')
|
|
144
|
+
expect(firstButton).toBeInTheDocument()
|
|
145
|
+
expect(mockFocus).toHaveBeenCalledWith({ preventScroll: true })
|
|
146
|
+
|
|
147
|
+
HTMLElement.prototype.focus = originalFocus
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
test('works with additionalContainer prop', () => {
|
|
151
|
+
const additionalRef = React.createRef<HTMLDivElement>()
|
|
152
|
+
|
|
153
|
+
render(
|
|
154
|
+
<div>
|
|
155
|
+
<CFocusTrap active={true} additionalContainer={additionalRef}>
|
|
156
|
+
<div data-testid="main-container">
|
|
157
|
+
<button data-testid="main-button">Main Button</button>
|
|
158
|
+
</div>
|
|
159
|
+
</CFocusTrap>
|
|
160
|
+
<div ref={additionalRef} data-testid="additional-container">
|
|
161
|
+
<button data-testid="additional-button">Additional Button</button>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
const mainContainer = screen.getByTestId('main-container')
|
|
167
|
+
const additionalContainer = screen.getByTestId('additional-container')
|
|
168
|
+
|
|
169
|
+
expect(mainContainer).toBeInTheDocument()
|
|
170
|
+
expect(additionalContainer).toBeInTheDocument()
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
test('restores focus when restoreFocus is true', () => {
|
|
174
|
+
// Mock document.activeElement to simulate a focused element
|
|
175
|
+
const focusButton = document.createElement('button')
|
|
176
|
+
focusButton.dataset.testid = 'focus-button'
|
|
177
|
+
document.body.appendChild(focusButton)
|
|
178
|
+
|
|
179
|
+
const mockFocus = jest.fn()
|
|
180
|
+
focusButton.focus = mockFocus
|
|
181
|
+
|
|
182
|
+
// Mock document.activeElement
|
|
183
|
+
Object.defineProperty(document, 'activeElement', {
|
|
184
|
+
value: focusButton,
|
|
185
|
+
writable: true,
|
|
186
|
+
configurable: true,
|
|
187
|
+
})
|
|
188
|
+
|
|
189
|
+
const { rerender } = render(<TestComponent active={false} restoreFocus={true} />)
|
|
190
|
+
|
|
191
|
+
// Activate the trap (should store the previous focused element)
|
|
192
|
+
rerender(<TestComponent active={true} restoreFocus={true} />)
|
|
193
|
+
|
|
194
|
+
// Deactivate the trap (should restore focus)
|
|
195
|
+
rerender(<TestComponent active={false} restoreFocus={true} />)
|
|
196
|
+
|
|
197
|
+
// Verify focus restoration was attempted
|
|
198
|
+
expect(mockFocus).toHaveBeenCalledWith({ preventScroll: true })
|
|
199
|
+
|
|
200
|
+
focusButton.remove()
|
|
201
|
+
})
|
|
202
|
+
|
|
203
|
+
test('does not restore focus when restoreFocus is false', () => {
|
|
204
|
+
// Mock document.activeElement to simulate a focused element
|
|
205
|
+
const focusButton = document.createElement('button')
|
|
206
|
+
focusButton.dataset.testid = 'focus-button'
|
|
207
|
+
document.body.appendChild(focusButton)
|
|
208
|
+
|
|
209
|
+
const mockFocus = jest.fn()
|
|
210
|
+
focusButton.focus = mockFocus
|
|
211
|
+
|
|
212
|
+
// Mock document.activeElement
|
|
213
|
+
Object.defineProperty(document, 'activeElement', {
|
|
214
|
+
value: focusButton,
|
|
215
|
+
writable: true,
|
|
216
|
+
configurable: true,
|
|
217
|
+
})
|
|
218
|
+
|
|
219
|
+
const { rerender } = render(<TestComponent active={false} restoreFocus={false} />)
|
|
220
|
+
|
|
221
|
+
// Activate the trap (should store the previous focused element)
|
|
222
|
+
rerender(<TestComponent active={true} restoreFocus={false} />)
|
|
223
|
+
|
|
224
|
+
// Deactivate the trap (should NOT restore focus)
|
|
225
|
+
rerender(<TestComponent active={false} restoreFocus={false} />)
|
|
226
|
+
|
|
227
|
+
// Verify focus restoration was not attempted
|
|
228
|
+
expect(mockFocus).not.toHaveBeenCalledWith({ preventScroll: true })
|
|
229
|
+
|
|
230
|
+
focusButton.remove()
|
|
231
|
+
})
|
|
232
|
+
})
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`CFocusTrap CFocusTrap with custom props 1`] = `
|
|
4
|
+
<div>
|
|
5
|
+
<div
|
|
6
|
+
data-testid="custom-container"
|
|
7
|
+
>
|
|
8
|
+
Custom Content
|
|
9
|
+
</div>
|
|
10
|
+
</div>
|
|
11
|
+
`;
|
|
12
|
+
|
|
13
|
+
exports[`CFocusTrap loads and displays CFocusTrap component 1`] = `
|
|
14
|
+
<div>
|
|
15
|
+
<div
|
|
16
|
+
data-testid="test-content"
|
|
17
|
+
>
|
|
18
|
+
Test Content
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
`;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Gets all focusable child elements within a container.
|
|
5
|
+
* Uses a comprehensive selector to find elements that can receive focus.
|
|
6
|
+
* @param element - The container element to search within
|
|
7
|
+
* @returns Array of focusable HTML elements
|
|
8
|
+
*/
|
|
9
|
+
export const focusableChildren = (element: HTMLElement): HTMLElement[] => {
|
|
10
|
+
const focusableSelectors = [
|
|
11
|
+
'a[href]',
|
|
12
|
+
'button:not([disabled])',
|
|
13
|
+
'input:not([disabled])',
|
|
14
|
+
'textarea:not([disabled])',
|
|
15
|
+
'select:not([disabled])',
|
|
16
|
+
'details',
|
|
17
|
+
'[tabindex]:not([tabindex="-1"])',
|
|
18
|
+
'[contenteditable="true"]',
|
|
19
|
+
].join(',')
|
|
20
|
+
|
|
21
|
+
const elements = [...element.querySelectorAll<HTMLElement>(focusableSelectors)] as HTMLElement[]
|
|
22
|
+
|
|
23
|
+
return elements.filter((el) => !isDisabled(el) && isVisible(el))
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Checks if an element is disabled.
|
|
28
|
+
* Considers various ways an element can be disabled including CSS classes and attributes.
|
|
29
|
+
* @param element - The HTML element to check
|
|
30
|
+
* @returns True if the element is disabled, false otherwise
|
|
31
|
+
*/
|
|
32
|
+
export const isDisabled = (element: HTMLElement): boolean => {
|
|
33
|
+
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
|
34
|
+
return true
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (element.classList.contains('disabled')) {
|
|
38
|
+
return true
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if ('disabled' in element && typeof element.disabled === 'boolean') {
|
|
42
|
+
return element.disabled
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Type guard to check if an object is an Element.
|
|
50
|
+
* Handles edge cases including jQuery objects.
|
|
51
|
+
* @param object - The object to check
|
|
52
|
+
* @returns True if the object is an Element, false otherwise
|
|
53
|
+
*/
|
|
54
|
+
export const isElement = (object: unknown): object is Element => {
|
|
55
|
+
if (!object || typeof object !== 'object') {
|
|
56
|
+
return false
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Handle jQuery objects
|
|
60
|
+
if ('jquery' in object && object.jquery !== undefined) {
|
|
61
|
+
const jQueryObject = object as { [key: number]: Element }
|
|
62
|
+
return isElement(jQueryObject[0])
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return 'nodeType' in object && typeof object.nodeType === 'number'
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Checks if an element is visible in the DOM.
|
|
70
|
+
* Considers client rects and computed visibility styles, handling edge cases like details elements.
|
|
71
|
+
* @param element - The HTML element to check for visibility
|
|
72
|
+
* @returns True if the element is visible, false otherwise
|
|
73
|
+
*/
|
|
74
|
+
export const isVisible = (element: HTMLElement): boolean => {
|
|
75
|
+
if (!isElement(element) || element.getClientRects().length === 0) {
|
|
76
|
+
return false
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'
|
|
80
|
+
|
|
81
|
+
// Handle `details` element as its content may falsely appear visible when it is closed
|
|
82
|
+
const closedDetails = element.closest('details:not([open])')
|
|
83
|
+
|
|
84
|
+
if (!closedDetails) {
|
|
85
|
+
return elementIsVisible
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (closedDetails !== element) {
|
|
89
|
+
const summary = element.closest('summary')
|
|
90
|
+
|
|
91
|
+
// Check if summary is a direct child of the closed details
|
|
92
|
+
if (summary?.parentNode !== closedDetails) {
|
|
93
|
+
return false
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return elementIsVisible
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Merges multiple React refs into a single ref callback.
|
|
102
|
+
* Handles both function refs and ref objects, gracefully ignoring failures.
|
|
103
|
+
* @param refs - Array of React refs to merge
|
|
104
|
+
* @returns A ref callback that applies to all provided refs
|
|
105
|
+
*/
|
|
106
|
+
export const mergeRefs =
|
|
107
|
+
<T>(...refs: (React.Ref<T> | undefined)[]) =>
|
|
108
|
+
(node: T) => {
|
|
109
|
+
refs.forEach((ref) => {
|
|
110
|
+
if (!ref) return
|
|
111
|
+
if (typeof ref === 'function') {
|
|
112
|
+
ref(node)
|
|
113
|
+
} else {
|
|
114
|
+
try {
|
|
115
|
+
;(ref as React.RefObject<T>).current = node
|
|
116
|
+
} catch {
|
|
117
|
+
// Ignore assignment failures for read-only refs
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
})
|
|
121
|
+
}
|
|
@@ -103,7 +103,7 @@ export const CFormCheck = forwardRef<HTMLInputElement, CFormCheckProps>(
|
|
|
103
103
|
valid,
|
|
104
104
|
...rest
|
|
105
105
|
},
|
|
106
|
-
ref
|
|
106
|
+
ref
|
|
107
107
|
) => {
|
|
108
108
|
const inputRef = useRef<HTMLInputElement>(null)
|
|
109
109
|
const forkedRef = useForkedRef(ref, inputRef)
|
|
@@ -151,9 +151,9 @@ export const CFormCheck = forwardRef<HTMLInputElement, CFormCheckProps>(
|
|
|
151
151
|
{
|
|
152
152
|
[`btn-${button.size}`]: button.size,
|
|
153
153
|
},
|
|
154
|
-
`${button.shape}
|
|
154
|
+
`${button.shape}`
|
|
155
155
|
)
|
|
156
|
-
: 'form-check-label'
|
|
156
|
+
: 'form-check-label'
|
|
157
157
|
)}
|
|
158
158
|
{...(id && { htmlFor: id })}
|
|
159
159
|
>
|
|
@@ -194,7 +194,7 @@ export const CFormCheck = forwardRef<HTMLInputElement, CFormCheckProps>(
|
|
|
194
194
|
'is-invalid': invalid,
|
|
195
195
|
'is-valid': valid,
|
|
196
196
|
},
|
|
197
|
-
className
|
|
197
|
+
className
|
|
198
198
|
)}
|
|
199
199
|
>
|
|
200
200
|
<FormControl />
|
|
@@ -208,7 +208,7 @@ export const CFormCheck = forwardRef<HTMLInputElement, CFormCheckProps>(
|
|
|
208
208
|
}
|
|
209
209
|
|
|
210
210
|
return <FormCheck />
|
|
211
|
-
}
|
|
211
|
+
}
|
|
212
212
|
)
|
|
213
213
|
|
|
214
214
|
CFormCheck.propTypes = {
|
|
@@ -38,7 +38,7 @@ export const CFormFeedback: PolymorphicRefForwardingComponent<'div', CFormFeedba
|
|
|
38
38
|
[`invalid-${tooltip ? 'tooltip' : 'feedback'}`]: invalid,
|
|
39
39
|
[`valid-${tooltip ? 'tooltip' : 'feedback'}`]: valid,
|
|
40
40
|
},
|
|
41
|
-
className
|
|
41
|
+
className
|
|
42
42
|
)}
|
|
43
43
|
{...rest}
|
|
44
44
|
ref={ref}
|
|
@@ -46,7 +46,7 @@ export const CFormFeedback: PolymorphicRefForwardingComponent<'div', CFormFeedba
|
|
|
46
46
|
{children}
|
|
47
47
|
</Component>
|
|
48
48
|
)
|
|
49
|
-
}
|
|
49
|
+
}
|
|
50
50
|
)
|
|
51
51
|
|
|
52
52
|
CFormFeedback.propTypes = {
|
|
@@ -76,14 +76,14 @@ export const CFormInput = forwardRef<HTMLInputElement, CFormInputProps>(
|
|
|
76
76
|
valid,
|
|
77
77
|
...rest
|
|
78
78
|
},
|
|
79
|
-
ref
|
|
79
|
+
ref
|
|
80
80
|
) => {
|
|
81
81
|
const [value, setValue] = useState<React.ChangeEvent<HTMLInputElement>>()
|
|
82
82
|
|
|
83
83
|
useEffect(() => {
|
|
84
84
|
const timeOutId = setTimeout(
|
|
85
85
|
() => value && onChange && onChange(value),
|
|
86
|
-
typeof delay === 'number' ? delay : 500
|
|
86
|
+
typeof delay === 'number' ? delay : 500
|
|
87
87
|
)
|
|
88
88
|
|
|
89
89
|
return () => clearTimeout(timeOutId)
|
|
@@ -113,7 +113,7 @@ export const CFormInput = forwardRef<HTMLInputElement, CFormInputProps>(
|
|
|
113
113
|
'is-invalid': invalid,
|
|
114
114
|
'is-valid': valid,
|
|
115
115
|
},
|
|
116
|
-
className
|
|
116
|
+
className
|
|
117
117
|
)}
|
|
118
118
|
id={id}
|
|
119
119
|
type={type}
|
|
@@ -125,7 +125,7 @@ export const CFormInput = forwardRef<HTMLInputElement, CFormInputProps>(
|
|
|
125
125
|
</input>
|
|
126
126
|
</CFormControlWrapper>
|
|
127
127
|
)
|
|
128
|
-
}
|
|
128
|
+
}
|
|
129
129
|
)
|
|
130
130
|
|
|
131
131
|
CFormInput.propTypes = {
|
|
@@ -66,7 +66,7 @@ export const CFormSelect = forwardRef<HTMLSelectElement, CFormSelectProps>(
|
|
|
66
66
|
valid,
|
|
67
67
|
...rest
|
|
68
68
|
},
|
|
69
|
-
ref
|
|
69
|
+
ref
|
|
70
70
|
) => {
|
|
71
71
|
return (
|
|
72
72
|
<CFormControlWrapper
|
|
@@ -92,7 +92,7 @@ export const CFormSelect = forwardRef<HTMLSelectElement, CFormSelectProps>(
|
|
|
92
92
|
'is-invalid': invalid,
|
|
93
93
|
'is-valid': valid,
|
|
94
94
|
},
|
|
95
|
-
className
|
|
95
|
+
className
|
|
96
96
|
)}
|
|
97
97
|
size={htmlSize}
|
|
98
98
|
{...rest}
|
|
@@ -116,7 +116,7 @@ export const CFormSelect = forwardRef<HTMLSelectElement, CFormSelectProps>(
|
|
|
116
116
|
</select>
|
|
117
117
|
</CFormControlWrapper>
|
|
118
118
|
)
|
|
119
|
-
}
|
|
119
|
+
}
|
|
120
120
|
)
|
|
121
121
|
|
|
122
122
|
CFormSelect.propTypes = {
|
|
@@ -53,7 +53,7 @@ export const CFormSwitch = forwardRef<HTMLInputElement, CFormSwitchProps>(
|
|
|
53
53
|
'is-invalid': invalid,
|
|
54
54
|
'is-valid': valid,
|
|
55
55
|
},
|
|
56
|
-
className
|
|
56
|
+
className
|
|
57
57
|
)}
|
|
58
58
|
>
|
|
59
59
|
<input
|
|
@@ -73,7 +73,7 @@ export const CFormSwitch = forwardRef<HTMLInputElement, CFormSwitchProps>(
|
|
|
73
73
|
)}
|
|
74
74
|
</div>
|
|
75
75
|
)
|
|
76
|
-
}
|
|
76
|
+
}
|
|
77
77
|
)
|
|
78
78
|
|
|
79
79
|
CFormSwitch.propTypes = {
|
|
@@ -54,7 +54,7 @@ export const CFormTextarea = forwardRef<HTMLTextAreaElement, CFormTextareaProps>
|
|
|
54
54
|
valid,
|
|
55
55
|
...rest
|
|
56
56
|
},
|
|
57
|
-
ref
|
|
57
|
+
ref
|
|
58
58
|
) => {
|
|
59
59
|
return (
|
|
60
60
|
<CFormControlWrapper
|
|
@@ -78,7 +78,7 @@ export const CFormTextarea = forwardRef<HTMLTextAreaElement, CFormTextareaProps>
|
|
|
78
78
|
'is-invalid': invalid,
|
|
79
79
|
'is-valid': valid,
|
|
80
80
|
},
|
|
81
|
-
className
|
|
81
|
+
className
|
|
82
82
|
)}
|
|
83
83
|
id={id}
|
|
84
84
|
{...rest}
|
|
@@ -88,7 +88,7 @@ export const CFormTextarea = forwardRef<HTMLTextAreaElement, CFormTextareaProps>
|
|
|
88
88
|
</textarea>
|
|
89
89
|
</CFormControlWrapper>
|
|
90
90
|
)
|
|
91
|
-
}
|
|
91
|
+
}
|
|
92
92
|
)
|
|
93
93
|
|
|
94
94
|
CFormTextarea.propTypes = {
|
|
@@ -22,7 +22,7 @@ export const CInputGroup = forwardRef<HTMLDivElement, CInputGroupProps>(
|
|
|
22
22
|
{
|
|
23
23
|
[`input-group-${size}`]: size,
|
|
24
24
|
},
|
|
25
|
-
className
|
|
25
|
+
className
|
|
26
26
|
)}
|
|
27
27
|
{...rest}
|
|
28
28
|
ref={ref}
|
|
@@ -30,7 +30,7 @@ export const CInputGroup = forwardRef<HTMLDivElement, CInputGroupProps>(
|
|
|
30
30
|
{children}
|
|
31
31
|
</div>
|
|
32
32
|
)
|
|
33
|
-
}
|
|
33
|
+
}
|
|
34
34
|
)
|
|
35
35
|
|
|
36
36
|
CInputGroup.propTypes = {
|
|
@@ -13,7 +13,7 @@ test('CForm customize', async () => {
|
|
|
13
13
|
const { container } = render(
|
|
14
14
|
<CForm className="bazinga" validated={true}>
|
|
15
15
|
Test
|
|
16
|
-
</CForm
|
|
16
|
+
</CForm>
|
|
17
17
|
)
|
|
18
18
|
expect(container).toMatchSnapshot()
|
|
19
19
|
expect(container.firstChild).toHaveClass('bazinga')
|
|
@@ -30,7 +30,7 @@ test('CForm example', async () => {
|
|
|
30
30
|
<CButton type="submit" color="primary">
|
|
31
31
|
E
|
|
32
32
|
</CButton>
|
|
33
|
-
</CForm
|
|
33
|
+
</CForm>
|
|
34
34
|
)
|
|
35
35
|
expect(container).toMatchSnapshot()
|
|
36
36
|
})
|
|
@@ -10,7 +10,7 @@ test('loads and displays CFormCheck component', async () => {
|
|
|
10
10
|
|
|
11
11
|
test('CFormCheck customize button=false', async () => {
|
|
12
12
|
const { container } = render(
|
|
13
|
-
<CFormCheck className="bazinga" id="id" inline={true} label="label" type="radio"
|
|
13
|
+
<CFormCheck className="bazinga" id="id" inline={true} label="label" type="radio" />
|
|
14
14
|
)
|
|
15
15
|
expect(container).toMatchSnapshot()
|
|
16
16
|
expect(container.firstChild).toHaveClass('bazinga')
|
|
@@ -27,7 +27,7 @@ test('CFormCheck customize button=true', async () => {
|
|
|
27
27
|
inline={true}
|
|
28
28
|
label="label"
|
|
29
29
|
type="radio"
|
|
30
|
-
|
|
30
|
+
/>
|
|
31
31
|
)
|
|
32
32
|
expect(container).toMatchSnapshot()
|
|
33
33
|
})
|