@coreui/react 5.0.0-rc.0 → 5.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cjs/components/alert/CAlertHeading.d.ts +7 -6
- package/dist/cjs/components/alert/CAlertHeading.js +2 -2
- package/dist/cjs/components/alert/CAlertHeading.js.map +1 -1
- package/dist/cjs/components/badge/CBadge.d.ts +7 -6
- package/dist/cjs/components/badge/CBadge.js +2 -2
- package/dist/cjs/components/badge/CBadge.js.map +1 -1
- package/dist/cjs/components/button/CButton.d.ts +7 -6
- package/dist/cjs/components/button/CButton.js +3 -3
- package/dist/cjs/components/button/CButton.js.map +1 -1
- package/dist/cjs/components/card/CCardHeader.d.ts +7 -6
- package/dist/cjs/components/card/CCardHeader.js +2 -2
- package/dist/cjs/components/card/CCardHeader.js.map +1 -1
- package/dist/cjs/components/card/CCardImage.d.ts +7 -6
- package/dist/cjs/components/card/CCardImage.js +2 -2
- package/dist/cjs/components/card/CCardImage.js.map +1 -1
- package/dist/cjs/components/card/CCardSubtitle.d.ts +7 -6
- package/dist/cjs/components/card/CCardSubtitle.js +2 -2
- package/dist/cjs/components/card/CCardSubtitle.js.map +1 -1
- package/dist/cjs/components/card/CCardText.d.ts +7 -6
- package/dist/cjs/components/card/CCardText.js +2 -2
- package/dist/cjs/components/card/CCardText.js.map +1 -1
- package/dist/cjs/components/card/CCardTitle.d.ts +7 -6
- package/dist/cjs/components/card/CCardTitle.js +2 -2
- package/dist/cjs/components/card/CCardTitle.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdown.d.ts +6 -5
- package/dist/cjs/components/dropdown/CDropdown.js +3 -3
- package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownHeader.d.ts +7 -6
- package/dist/cjs/components/dropdown/CDropdownHeader.js +2 -2
- package/dist/cjs/components/dropdown/CDropdownHeader.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownItem.d.ts +2 -6
- 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.d.ts +7 -6
- package/dist/cjs/components/dropdown/CDropdownItemPlain.js +2 -2
- package/dist/cjs/components/dropdown/CDropdownItemPlain.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownMenu.d.ts +7 -6
- package/dist/cjs/components/dropdown/CDropdownMenu.js +2 -2
- package/dist/cjs/components/dropdown/CDropdownMenu.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownToggle.d.ts +1 -1
- package/dist/cjs/components/form/CFormFeedback.d.ts +7 -6
- package/dist/cjs/components/form/CFormFeedback.js +2 -2
- package/dist/cjs/components/form/CFormFeedback.js.map +1 -1
- package/dist/cjs/components/form/CFormText.d.ts +7 -6
- package/dist/cjs/components/form/CFormText.js +2 -2
- package/dist/cjs/components/form/CFormText.js.map +1 -1
- package/dist/cjs/components/form/CInputGroupText.d.ts +7 -6
- package/dist/cjs/components/form/CInputGroupText.js +2 -2
- package/dist/cjs/components/form/CInputGroupText.js.map +1 -1
- package/dist/cjs/components/header/CHeaderBrand.d.ts +7 -6
- package/dist/cjs/components/header/CHeaderBrand.js +2 -2
- package/dist/cjs/components/header/CHeaderBrand.js.map +1 -1
- package/dist/cjs/components/header/CHeaderNav.d.ts +7 -6
- package/dist/cjs/components/header/CHeaderNav.js +2 -2
- package/dist/cjs/components/header/CHeaderNav.js.map +1 -1
- package/dist/cjs/components/link/CLink.d.ts +8 -7
- package/dist/cjs/components/link/CLink.js +2 -2
- package/dist/cjs/components/link/CLink.js.map +1 -1
- package/dist/cjs/components/list-group/CListGroup.d.ts +7 -6
- package/dist/cjs/components/list-group/CListGroup.js +2 -2
- package/dist/cjs/components/list-group/CListGroup.js.map +1 -1
- package/dist/cjs/components/list-group/CListGroupItem.d.ts +7 -6
- package/dist/cjs/components/list-group/CListGroupItem.js +6 -6
- package/dist/cjs/components/list-group/CListGroupItem.js.map +1 -1
- package/dist/cjs/components/modal/CModal.js +1 -2
- package/dist/cjs/components/modal/CModal.js.map +1 -1
- package/dist/cjs/components/modal/CModalTitle.d.ts +4 -3
- package/dist/cjs/components/modal/CModalTitle.js +2 -2
- package/dist/cjs/components/modal/CModalTitle.js.map +1 -1
- package/dist/cjs/components/nav/CNav.d.ts +7 -6
- package/dist/cjs/components/nav/CNav.js +2 -2
- package/dist/cjs/components/nav/CNav.js.map +1 -1
- package/dist/cjs/components/nav/CNavGroup.d.ts +10 -4
- package/dist/cjs/components/nav/CNavGroup.js +11 -16
- package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
- package/dist/cjs/components/nav/CNavGroupItems.d.ts +10 -3
- package/dist/cjs/components/nav/CNavGroupItems.js +3 -2
- package/dist/cjs/components/nav/CNavGroupItems.js.map +1 -1
- package/dist/cjs/components/nav/CNavItem.d.ts +11 -2
- package/dist/cjs/components/nav/CNavItem.js +3 -2
- package/dist/cjs/components/nav/CNavItem.js.map +1 -1
- package/dist/cjs/components/nav/CNavLink.d.ts +2 -18
- package/dist/cjs/components/nav/CNavLink.js +3 -0
- package/dist/cjs/components/nav/CNavLink.js.map +1 -1
- package/dist/cjs/components/nav/CNavTitle.d.ts +7 -2
- package/dist/cjs/components/nav/CNavTitle.js +3 -2
- package/dist/cjs/components/nav/CNavTitle.js.map +1 -1
- package/dist/cjs/components/navbar/CNavbar.d.ts +7 -6
- package/dist/cjs/components/navbar/CNavbar.js +2 -2
- package/dist/cjs/components/navbar/CNavbar.js.map +1 -1
- package/dist/cjs/components/navbar/CNavbarBrand.d.ts +8 -7
- package/dist/cjs/components/navbar/CNavbarBrand.js +3 -3
- package/dist/cjs/components/navbar/CNavbarBrand.js.map +1 -1
- package/dist/cjs/components/navbar/CNavbarNav.d.ts +7 -6
- package/dist/cjs/components/navbar/CNavbarNav.js +3 -3
- package/dist/cjs/components/navbar/CNavbarNav.js.map +1 -1
- package/dist/cjs/components/offcanvas/COffcanvasTitle.d.ts +7 -6
- package/dist/cjs/components/offcanvas/COffcanvasTitle.js +2 -2
- package/dist/cjs/components/offcanvas/COffcanvasTitle.js.map +1 -1
- package/dist/cjs/components/pagination/CPaginationItem.d.ts +4 -3
- package/dist/cjs/components/pagination/CPaginationItem.js +4 -4
- package/dist/cjs/components/pagination/CPaginationItem.js.map +1 -1
- package/dist/cjs/components/placeholder/CPlaceholder.d.ts +7 -6
- package/dist/cjs/components/placeholder/CPlaceholder.js +2 -2
- package/dist/cjs/components/placeholder/CPlaceholder.js.map +1 -1
- package/dist/cjs/components/popover/CPopover.js +19 -12
- package/dist/cjs/components/popover/CPopover.js.map +1 -1
- package/dist/cjs/components/sidebar/CSidebarBrand.d.ts +10 -3
- package/dist/cjs/components/sidebar/CSidebarBrand.js +3 -2
- package/dist/cjs/components/sidebar/CSidebarBrand.js.map +1 -1
- package/dist/cjs/components/sidebar/CSidebarNav.d.ts +9 -2
- package/dist/cjs/components/sidebar/CSidebarNav.js +30 -12
- package/dist/cjs/components/sidebar/CSidebarNav.js.map +1 -1
- package/dist/cjs/components/spinner/CSpinner.d.ts +7 -6
- package/dist/cjs/components/spinner/CSpinner.js +2 -2
- package/dist/cjs/components/spinner/CSpinner.js.map +1 -1
- package/dist/cjs/components/toast/CToastClose.d.ts +5 -4
- package/dist/cjs/components/toast/CToastClose.js +2 -2
- package/dist/cjs/components/toast/CToastClose.js.map +1 -1
- package/dist/cjs/components/tooltip/CTooltip.js +19 -12
- package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
- package/dist/cjs/helpers/index.d.ts +2 -0
- package/dist/cjs/helpers/polymorphicComponent.d.ts +14 -0
- package/dist/esm/components/alert/CAlertHeading.d.ts +7 -6
- package/dist/esm/components/alert/CAlertHeading.js +2 -2
- package/dist/esm/components/alert/CAlertHeading.js.map +1 -1
- package/dist/esm/components/badge/CBadge.d.ts +7 -6
- package/dist/esm/components/badge/CBadge.js +2 -2
- package/dist/esm/components/badge/CBadge.js.map +1 -1
- package/dist/esm/components/button/CButton.d.ts +7 -6
- package/dist/esm/components/button/CButton.js +3 -3
- package/dist/esm/components/button/CButton.js.map +1 -1
- package/dist/esm/components/card/CCardHeader.d.ts +7 -6
- package/dist/esm/components/card/CCardHeader.js +2 -2
- package/dist/esm/components/card/CCardHeader.js.map +1 -1
- package/dist/esm/components/card/CCardImage.d.ts +7 -6
- package/dist/esm/components/card/CCardImage.js +2 -2
- package/dist/esm/components/card/CCardImage.js.map +1 -1
- package/dist/esm/components/card/CCardSubtitle.d.ts +7 -6
- package/dist/esm/components/card/CCardSubtitle.js +2 -2
- package/dist/esm/components/card/CCardSubtitle.js.map +1 -1
- package/dist/esm/components/card/CCardText.d.ts +7 -6
- package/dist/esm/components/card/CCardText.js +2 -2
- package/dist/esm/components/card/CCardText.js.map +1 -1
- package/dist/esm/components/card/CCardTitle.d.ts +7 -6
- package/dist/esm/components/card/CCardTitle.js +2 -2
- package/dist/esm/components/card/CCardTitle.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdown.d.ts +6 -5
- package/dist/esm/components/dropdown/CDropdown.js +3 -3
- package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownHeader.d.ts +7 -6
- package/dist/esm/components/dropdown/CDropdownHeader.js +2 -2
- package/dist/esm/components/dropdown/CDropdownHeader.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownItem.d.ts +2 -6
- package/dist/esm/components/dropdown/CDropdownItem.js +3 -3
- package/dist/esm/components/dropdown/CDropdownItem.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownItemPlain.d.ts +7 -6
- package/dist/esm/components/dropdown/CDropdownItemPlain.js +2 -2
- package/dist/esm/components/dropdown/CDropdownItemPlain.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownMenu.d.ts +7 -6
- package/dist/esm/components/dropdown/CDropdownMenu.js +2 -2
- package/dist/esm/components/dropdown/CDropdownMenu.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownToggle.d.ts +1 -1
- package/dist/esm/components/form/CFormFeedback.d.ts +7 -6
- package/dist/esm/components/form/CFormFeedback.js +2 -2
- package/dist/esm/components/form/CFormFeedback.js.map +1 -1
- package/dist/esm/components/form/CFormText.d.ts +7 -6
- package/dist/esm/components/form/CFormText.js +2 -2
- package/dist/esm/components/form/CFormText.js.map +1 -1
- package/dist/esm/components/form/CInputGroupText.d.ts +7 -6
- package/dist/esm/components/form/CInputGroupText.js +2 -2
- package/dist/esm/components/form/CInputGroupText.js.map +1 -1
- package/dist/esm/components/header/CHeaderBrand.d.ts +7 -6
- package/dist/esm/components/header/CHeaderBrand.js +2 -2
- package/dist/esm/components/header/CHeaderBrand.js.map +1 -1
- package/dist/esm/components/header/CHeaderNav.d.ts +7 -6
- package/dist/esm/components/header/CHeaderNav.js +2 -2
- package/dist/esm/components/header/CHeaderNav.js.map +1 -1
- package/dist/esm/components/link/CLink.d.ts +8 -7
- package/dist/esm/components/link/CLink.js +2 -2
- package/dist/esm/components/link/CLink.js.map +1 -1
- package/dist/esm/components/list-group/CListGroup.d.ts +7 -6
- package/dist/esm/components/list-group/CListGroup.js +2 -2
- package/dist/esm/components/list-group/CListGroup.js.map +1 -1
- package/dist/esm/components/list-group/CListGroupItem.d.ts +7 -6
- package/dist/esm/components/list-group/CListGroupItem.js +6 -6
- package/dist/esm/components/list-group/CListGroupItem.js.map +1 -1
- package/dist/esm/components/modal/CModal.js +1 -2
- package/dist/esm/components/modal/CModal.js.map +1 -1
- package/dist/esm/components/modal/CModalTitle.d.ts +4 -3
- package/dist/esm/components/modal/CModalTitle.js +2 -2
- package/dist/esm/components/modal/CModalTitle.js.map +1 -1
- package/dist/esm/components/nav/CNav.d.ts +7 -6
- package/dist/esm/components/nav/CNav.js +2 -2
- package/dist/esm/components/nav/CNav.js.map +1 -1
- package/dist/esm/components/nav/CNavGroup.d.ts +10 -4
- package/dist/esm/components/nav/CNavGroup.js +11 -16
- package/dist/esm/components/nav/CNavGroup.js.map +1 -1
- package/dist/esm/components/nav/CNavGroupItems.d.ts +10 -3
- package/dist/esm/components/nav/CNavGroupItems.js +3 -2
- package/dist/esm/components/nav/CNavGroupItems.js.map +1 -1
- package/dist/esm/components/nav/CNavItem.d.ts +11 -2
- package/dist/esm/components/nav/CNavItem.js +3 -2
- package/dist/esm/components/nav/CNavItem.js.map +1 -1
- package/dist/esm/components/nav/CNavLink.d.ts +2 -18
- package/dist/esm/components/nav/CNavLink.js +3 -0
- package/dist/esm/components/nav/CNavLink.js.map +1 -1
- package/dist/esm/components/nav/CNavTitle.d.ts +7 -2
- package/dist/esm/components/nav/CNavTitle.js +3 -2
- package/dist/esm/components/nav/CNavTitle.js.map +1 -1
- package/dist/esm/components/navbar/CNavbar.d.ts +7 -6
- package/dist/esm/components/navbar/CNavbar.js +2 -2
- package/dist/esm/components/navbar/CNavbar.js.map +1 -1
- package/dist/esm/components/navbar/CNavbarBrand.d.ts +8 -7
- package/dist/esm/components/navbar/CNavbarBrand.js +3 -3
- package/dist/esm/components/navbar/CNavbarBrand.js.map +1 -1
- package/dist/esm/components/navbar/CNavbarNav.d.ts +7 -6
- package/dist/esm/components/navbar/CNavbarNav.js +3 -3
- package/dist/esm/components/navbar/CNavbarNav.js.map +1 -1
- package/dist/esm/components/offcanvas/COffcanvasTitle.d.ts +7 -6
- package/dist/esm/components/offcanvas/COffcanvasTitle.js +2 -2
- package/dist/esm/components/offcanvas/COffcanvasTitle.js.map +1 -1
- package/dist/esm/components/pagination/CPaginationItem.d.ts +4 -3
- package/dist/esm/components/pagination/CPaginationItem.js +4 -4
- package/dist/esm/components/pagination/CPaginationItem.js.map +1 -1
- package/dist/esm/components/placeholder/CPlaceholder.d.ts +7 -6
- package/dist/esm/components/placeholder/CPlaceholder.js +2 -2
- package/dist/esm/components/placeholder/CPlaceholder.js.map +1 -1
- package/dist/esm/components/popover/CPopover.js +19 -12
- package/dist/esm/components/popover/CPopover.js.map +1 -1
- package/dist/esm/components/sidebar/CSidebarBrand.d.ts +10 -3
- package/dist/esm/components/sidebar/CSidebarBrand.js +3 -2
- package/dist/esm/components/sidebar/CSidebarBrand.js.map +1 -1
- package/dist/esm/components/sidebar/CSidebarNav.d.ts +9 -2
- package/dist/esm/components/sidebar/CSidebarNav.js +30 -12
- package/dist/esm/components/sidebar/CSidebarNav.js.map +1 -1
- package/dist/esm/components/spinner/CSpinner.d.ts +7 -6
- package/dist/esm/components/spinner/CSpinner.js +2 -2
- package/dist/esm/components/spinner/CSpinner.js.map +1 -1
- package/dist/esm/components/toast/CToastClose.d.ts +5 -4
- package/dist/esm/components/toast/CToastClose.js +2 -2
- package/dist/esm/components/toast/CToastClose.js.map +1 -1
- package/dist/esm/components/tooltip/CTooltip.js +19 -12
- package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
- package/dist/esm/helpers/index.d.ts +2 -0
- package/dist/esm/helpers/polymorphicComponent.d.ts +14 -0
- package/package.json +10 -10
- package/src/components/alert/CAlertHeading.tsx +17 -14
- package/src/components/alert/__tests__/CAlertHeading.spec.tsx +1 -1
- package/src/components/badge/CBadge.tsx +11 -7
- package/src/components/badge/__tests__/CBadge.spec.tsx +1 -1
- package/src/components/button/CButton.tsx +12 -18
- package/src/components/button/__tests__/CButton.spec.tsx +2 -2
- package/src/components/card/CCardHeader.tsx +17 -14
- package/src/components/card/CCardImage.tsx +9 -7
- package/src/components/card/CCardSubtitle.tsx +18 -14
- package/src/components/card/CCardText.tsx +17 -14
- package/src/components/card/CCardTitle.tsx +17 -14
- 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__/CCardImage.spec.tsx +1 -3
- 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/conditional-portal/CConditionalPortal.tsx +1 -1
- package/src/components/dropdown/CDropdown.tsx +12 -8
- package/src/components/dropdown/CDropdownHeader.tsx +17 -14
- package/src/components/dropdown/CDropdownItem.tsx +14 -20
- package/src/components/dropdown/CDropdownItemPlain.tsx +12 -7
- package/src/components/dropdown/CDropdownMenu.tsx +43 -41
- package/src/components/dropdown/CDropdownToggle.tsx +1 -1
- package/src/components/dropdown/__tests__/CDropdown.spec.tsx +1 -1
- 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/types.ts +1 -1
- package/src/components/form/CFormFeedback.tsx +28 -27
- package/src/components/form/CFormText.tsx +17 -14
- package/src/components/form/CInputGroupText.tsx +17 -14
- package/src/components/form/__tests__/CFormText.spec.tsx +1 -1
- package/src/components/form/__tests__/CInputGroupText.spec.tsx +1 -1
- package/src/components/header/CHeaderBrand.tsx +17 -14
- package/src/components/header/CHeaderNav.tsx +22 -19
- package/src/components/header/__tests__/CHeaderBrand.spec.tsx +1 -1
- package/src/components/header/__tests__/CHeaderNav.spec.tsx +1 -1
- package/src/components/link/CLink.tsx +33 -29
- package/src/components/link/__tests__/CLink.spec.tsx +2 -2
- package/src/components/list-group/CListGroup.tsx +27 -24
- package/src/components/list-group/CListGroupItem.tsx +38 -37
- package/src/components/list-group/__tests__/CListGroup.spec.tsx +1 -1
- package/src/components/list-group/__tests__/CListGroupItem.spec.tsx +1 -7
- package/src/components/modal/CModal.tsx +1 -4
- package/src/components/modal/CModalTitle.tsx +14 -11
- package/src/components/modal/__tests__/CModalTitle.spec.tsx +1 -1
- package/src/components/nav/CNav.tsx +29 -26
- package/src/components/nav/CNavGroup.tsx +111 -100
- package/src/components/nav/CNavGroupItems.tsx +21 -11
- package/src/components/nav/CNavItem.tsx +29 -16
- package/src/components/nav/CNavLink.tsx +7 -19
- package/src/components/nav/CNavTitle.tsx +18 -10
- package/src/components/nav/__tests__/CNav.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 +11 -7
- package/src/components/navbar/CNavbarBrand.tsx +19 -16
- package/src/components/navbar/CNavbarNav.tsx +22 -19
- package/src/components/navbar/__tests__/CNavbar.spec.tsx +1 -1
- package/src/components/navbar/__tests__/CNavbarBrand.spec.tsx +1 -1
- package/src/components/navbar/__tests__/CNavbarNav.spec.tsx +1 -1
- package/src/components/offcanvas/COffcanvasTitle.tsx +17 -14
- package/src/components/offcanvas/__tests__/COffcanvasTitle.spec.tsx +1 -1
- package/src/components/pagination/CPaginationItem.tsx +33 -30
- package/src/components/pagination/__tests__/CPaginationItem.spec.tsx +1 -1
- package/src/components/placeholder/CPlaceholder.tsx +40 -41
- package/src/components/popover/CPopover.tsx +24 -13
- package/src/components/sidebar/CSidebarBrand.tsx +21 -11
- package/src/components/sidebar/CSidebarNav.tsx +68 -24
- package/src/components/spinner/CSpinner.tsx +11 -7
- package/src/components/spinner/__tests__/CSpinner.spec.tsx +1 -1
- package/src/components/toast/CToastClose.tsx +8 -7
- package/src/components/tooltip/CTooltip.tsx +24 -12
- package/src/helpers/index.ts +3 -0
- package/src/helpers/polymorphicComponent.ts +21 -0
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import React, {
|
|
2
2
|
CSSProperties,
|
|
3
|
+
ElementType,
|
|
3
4
|
forwardRef,
|
|
5
|
+
HTMLAttributes,
|
|
4
6
|
ReactNode,
|
|
5
7
|
useContext,
|
|
6
8
|
useEffect,
|
|
@@ -12,9 +14,17 @@ import classNames from 'classnames'
|
|
|
12
14
|
import { Transition } from 'react-transition-group'
|
|
13
15
|
import type { TransitionStatus } from 'react-transition-group'
|
|
14
16
|
|
|
17
|
+
import { PolymorphicRefForwardingComponent } from '../../helpers'
|
|
18
|
+
|
|
15
19
|
import { CNavContext } from '../sidebar/CSidebarNav'
|
|
16
|
-
|
|
17
|
-
|
|
20
|
+
|
|
21
|
+
export interface CNavGroupProps extends HTMLAttributes<HTMLDivElement | HTMLLIElement> {
|
|
22
|
+
/**
|
|
23
|
+
* Component used for the root node. Either a string to use a HTML element or a component.
|
|
24
|
+
*
|
|
25
|
+
* @since 5.0.0-rc.1
|
|
26
|
+
*/
|
|
27
|
+
as?: ElementType
|
|
18
28
|
/**
|
|
19
29
|
* A string of all className you want applied to the component.
|
|
20
30
|
*/
|
|
@@ -44,110 +54,111 @@ const isInVisibleGroup = (el1: string, el2: string) => {
|
|
|
44
54
|
return array2.every((item, index) => item === array1[index])
|
|
45
55
|
}
|
|
46
56
|
|
|
47
|
-
export const CNavGroup
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
57
|
+
export const CNavGroup: PolymorphicRefForwardingComponent<'li', CNavGroupProps> = forwardRef<
|
|
58
|
+
HTMLDivElement | HTMLLIElement,
|
|
59
|
+
CNavGroupProps
|
|
60
|
+
>(({ children, as: Component = 'li', className, compact, idx, toggler, visible, ...rest }, ref) => {
|
|
61
|
+
const [height, setHeight] = useState<number | string>()
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
63
|
+
const navItemsRef = useRef<any>(null)
|
|
51
64
|
|
|
52
|
-
|
|
65
|
+
const { visibleGroup, setVisibleGroup } = useContext(CNavContext)
|
|
53
66
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
67
|
+
const [_visible, setVisible] = useState(
|
|
68
|
+
Boolean(visible || (idx && visibleGroup && isInVisibleGroup(visibleGroup, idx))),
|
|
69
|
+
)
|
|
57
70
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
)
|
|
67
|
-
setVisible(!_visible)
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const style: CSSProperties = {
|
|
71
|
-
height: 0,
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
const onEntering = () => {
|
|
75
|
-
navItemsRef.current && setHeight(navItemsRef.current.scrollHeight)
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const onEntered = () => {
|
|
79
|
-
setHeight('auto')
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const onExit = () => {
|
|
83
|
-
navItemsRef.current && setHeight(navItemsRef.current.scrollHeight)
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
const onExiting = () => {
|
|
87
|
-
// @ts-expect-error reflow is necessary to get correct height of the element
|
|
88
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
89
|
-
const reflow = navItemsRef.current?.offsetHeight
|
|
90
|
-
setHeight(0)
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
const onExited = () => {
|
|
94
|
-
setHeight(0)
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
const transitionStyles = {
|
|
98
|
-
entering: { display: 'block', height: height },
|
|
99
|
-
entered: { display: 'block', height: height },
|
|
100
|
-
exiting: { display: 'block', height: height },
|
|
101
|
-
exited: { height: height },
|
|
102
|
-
unmounted: {}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return (
|
|
106
|
-
<li className={classNames('nav-group', { show: _visible }, className)} {...rest} ref={ref}>
|
|
107
|
-
{toggler && (
|
|
108
|
-
<a className="nav-link nav-group-toggle" onClick={(event) => handleTogglerOnCLick(event)}>
|
|
109
|
-
{toggler}
|
|
110
|
-
</a>
|
|
111
|
-
)}
|
|
112
|
-
<Transition
|
|
113
|
-
in={_visible}
|
|
114
|
-
nodeRef={navItemsRef}
|
|
115
|
-
onEntering={onEntering}
|
|
116
|
-
onEntered={onEntered}
|
|
117
|
-
onExit={onExit}
|
|
118
|
-
onExiting={onExiting}
|
|
119
|
-
onExited={onExited}
|
|
120
|
-
timeout={300}
|
|
121
|
-
>
|
|
122
|
-
{(state) => (
|
|
123
|
-
<ul
|
|
124
|
-
className={classNames('nav-group-items', {
|
|
125
|
-
compact: compact,
|
|
126
|
-
})}
|
|
127
|
-
style={{
|
|
128
|
-
...style,
|
|
129
|
-
...transitionStyles[state as TransitionStatus],
|
|
130
|
-
}}
|
|
131
|
-
ref={navItemsRef}
|
|
132
|
-
>
|
|
133
|
-
{React.Children.map(children, (child, index) => {
|
|
134
|
-
if (React.isValidElement(child)) {
|
|
135
|
-
return React.cloneElement(child as React.ReactElement<any>, {
|
|
136
|
-
key: index,
|
|
137
|
-
idx: `${idx}.${index}`,
|
|
138
|
-
})
|
|
139
|
-
}
|
|
140
|
-
return
|
|
141
|
-
})}
|
|
142
|
-
</ul>
|
|
143
|
-
)}
|
|
144
|
-
</Transition>
|
|
145
|
-
</li>
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
setVisible(Boolean(idx && visibleGroup && isInVisibleGroup(visibleGroup, idx)))
|
|
73
|
+
}, [visibleGroup])
|
|
74
|
+
|
|
75
|
+
const handleTogglerOnCLick = (event: React.MouseEvent<HTMLElement>) => {
|
|
76
|
+
event.preventDefault()
|
|
77
|
+
setVisibleGroup(
|
|
78
|
+
_visible ? (idx?.toString().includes('.') ? idx.slice(0, idx.lastIndexOf('.')) : '') : idx,
|
|
146
79
|
)
|
|
147
|
-
|
|
148
|
-
|
|
80
|
+
setVisible(!_visible)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const style: CSSProperties = {
|
|
84
|
+
height: 0,
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const onEntering = () => {
|
|
88
|
+
navItemsRef.current && setHeight(navItemsRef.current.scrollHeight)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const onEntered = () => {
|
|
92
|
+
setHeight('auto')
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const onExit = () => {
|
|
96
|
+
navItemsRef.current && setHeight(navItemsRef.current.scrollHeight)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const onExiting = () => {
|
|
100
|
+
// @ts-expect-error reflow is necessary to get correct height of the element
|
|
101
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
102
|
+
const reflow = navItemsRef.current?.offsetHeight
|
|
103
|
+
setHeight(0)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const onExited = () => {
|
|
107
|
+
setHeight(0)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const transitionStyles = {
|
|
111
|
+
entering: { display: 'block', height: height },
|
|
112
|
+
entered: { display: 'block', height: height },
|
|
113
|
+
exiting: { display: 'block', height: height },
|
|
114
|
+
exited: { height: height },
|
|
115
|
+
unmounted: {},
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const NavGroupItemsComponent = Component === 'li' ? 'ul' : 'div'
|
|
119
|
+
|
|
120
|
+
return (
|
|
121
|
+
<Component
|
|
122
|
+
className={classNames('nav-group', { show: _visible }, className)}
|
|
123
|
+
{...rest}
|
|
124
|
+
ref={ref}
|
|
125
|
+
>
|
|
126
|
+
{toggler && (
|
|
127
|
+
<a className="nav-link nav-group-toggle" onClick={(event) => handleTogglerOnCLick(event)}>
|
|
128
|
+
{toggler}
|
|
129
|
+
</a>
|
|
130
|
+
)}
|
|
131
|
+
<Transition
|
|
132
|
+
in={_visible}
|
|
133
|
+
nodeRef={navItemsRef}
|
|
134
|
+
onEntering={onEntering}
|
|
135
|
+
onEntered={onEntered}
|
|
136
|
+
onExit={onExit}
|
|
137
|
+
onExiting={onExiting}
|
|
138
|
+
onExited={onExited}
|
|
139
|
+
timeout={300}
|
|
140
|
+
>
|
|
141
|
+
{(state) => (
|
|
142
|
+
<NavGroupItemsComponent
|
|
143
|
+
className={classNames('nav-group-items', {
|
|
144
|
+
compact: compact,
|
|
145
|
+
})}
|
|
146
|
+
style={{
|
|
147
|
+
...style,
|
|
148
|
+
...transitionStyles[state as TransitionStatus],
|
|
149
|
+
}}
|
|
150
|
+
ref={navItemsRef}
|
|
151
|
+
>
|
|
152
|
+
{children}
|
|
153
|
+
</NavGroupItemsComponent>
|
|
154
|
+
)}
|
|
155
|
+
</Transition>
|
|
156
|
+
</Component>
|
|
157
|
+
)
|
|
158
|
+
})
|
|
149
159
|
|
|
150
160
|
CNavGroup.propTypes = {
|
|
161
|
+
as: PropTypes.elementType,
|
|
151
162
|
children: PropTypes.node,
|
|
152
163
|
className: PropTypes.string,
|
|
153
164
|
compact: PropTypes.bool,
|
|
@@ -1,25 +1,35 @@
|
|
|
1
|
-
import React, { forwardRef, HTMLAttributes } from 'react'
|
|
1
|
+
import React, { ElementType, forwardRef, HTMLAttributes } from 'react'
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
import { PolymorphicRefForwardingComponent } from '../../helpers'
|
|
6
|
+
|
|
7
|
+
export interface CNavGroupItemsProps extends HTMLAttributes<HTMLDivElement | HTMLUListElement> {
|
|
8
|
+
/**
|
|
9
|
+
* Component used for the root node. Either a string to use a HTML element or a component.
|
|
10
|
+
*
|
|
11
|
+
* @since 5.0.0-rc.1
|
|
12
|
+
*/
|
|
13
|
+
as?: ElementType
|
|
6
14
|
/**
|
|
7
15
|
* A string of all className you want applied to the component.
|
|
8
16
|
*/
|
|
9
17
|
className?: string
|
|
10
18
|
}
|
|
11
19
|
|
|
12
|
-
export const CNavGroupItems
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
{
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
export const CNavGroupItems: PolymorphicRefForwardingComponent<'ul', CNavGroupItemsProps> =
|
|
21
|
+
forwardRef<HTMLDivElement | HTMLUListElement, CNavGroupItemsProps>(
|
|
22
|
+
({ children, as: Component = 'ul', className, ...rest }, ref) => {
|
|
23
|
+
return (
|
|
24
|
+
<Component className={classNames('nav-group-items', className)} {...rest} ref={ref}>
|
|
25
|
+
{children}
|
|
26
|
+
</Component>
|
|
27
|
+
)
|
|
28
|
+
},
|
|
29
|
+
)
|
|
21
30
|
|
|
22
31
|
CNavGroupItems.propTypes = {
|
|
32
|
+
as: PropTypes.elementType,
|
|
23
33
|
children: PropTypes.node,
|
|
24
34
|
className: PropTypes.string,
|
|
25
35
|
}
|
|
@@ -1,26 +1,39 @@
|
|
|
1
|
-
import React, { forwardRef } from 'react'
|
|
1
|
+
import React, { ElementType, forwardRef } from 'react'
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
5
|
import { CNavLink, CNavLinkProps } from './CNavLink'
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
)
|
|
7
|
+
import { PolymorphicRefForwardingComponent } from '../../helpers'
|
|
8
|
+
|
|
9
|
+
export interface CNavItemProps extends Omit<CNavLinkProps, 'component'> {
|
|
10
|
+
/**
|
|
11
|
+
* Component used for the root node. Either a string to use a HTML element or a component.
|
|
12
|
+
*
|
|
13
|
+
* @since 5.0.0-rc.1
|
|
14
|
+
*/
|
|
15
|
+
as?: ElementType
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const CNavItem: PolymorphicRefForwardingComponent<'li', CNavItemProps> = forwardRef<
|
|
19
|
+
HTMLLIElement,
|
|
20
|
+
CNavItemProps
|
|
21
|
+
>(({ children, as: Component = 'li', className, ...rest }, ref) => {
|
|
22
|
+
return (
|
|
23
|
+
<Component className={classNames('nav-item', className)} ref={ref}>
|
|
24
|
+
{rest.href || rest.to ? (
|
|
25
|
+
<CNavLink className={className} {...rest}>
|
|
26
|
+
{children}
|
|
27
|
+
</CNavLink>
|
|
28
|
+
) : (
|
|
29
|
+
children
|
|
30
|
+
)}
|
|
31
|
+
</Component>
|
|
32
|
+
)
|
|
33
|
+
})
|
|
22
34
|
|
|
23
35
|
CNavItem.propTypes = {
|
|
36
|
+
as: PropTypes.elementType,
|
|
24
37
|
children: PropTypes.node,
|
|
25
38
|
className: PropTypes.string,
|
|
26
39
|
}
|
|
@@ -1,29 +1,14 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { forwardRef, useContext, useEffect, useRef } from 'react'
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
5
|
import { CLinkProps, CLink } from '../link/CLink'
|
|
6
6
|
import { CNavContext } from '../sidebar/CSidebarNav'
|
|
7
7
|
|
|
8
|
+
import { PolymorphicRefForwardingComponent } from '../../helpers'
|
|
8
9
|
import { useForkedRef } from '../../hooks'
|
|
9
10
|
|
|
10
11
|
export interface CNavLinkProps extends Omit<CLinkProps, 'idx'> {
|
|
11
|
-
/**
|
|
12
|
-
* Toggle the active state for the component.
|
|
13
|
-
*/
|
|
14
|
-
active?: boolean
|
|
15
|
-
/**
|
|
16
|
-
* A string of all className you want applied to the component.
|
|
17
|
-
*/
|
|
18
|
-
className?: string
|
|
19
|
-
/**
|
|
20
|
-
* Component used for the root node. Either a string to use a HTML element or a component.
|
|
21
|
-
*/
|
|
22
|
-
component?: string | ElementType
|
|
23
|
-
/**
|
|
24
|
-
* Toggle the disabled state for the component.
|
|
25
|
-
*/
|
|
26
|
-
disabled?: boolean
|
|
27
12
|
/**
|
|
28
13
|
* @ignore
|
|
29
14
|
*/
|
|
@@ -34,8 +19,8 @@ export interface CNavLinkProps extends Omit<CLinkProps, 'idx'> {
|
|
|
34
19
|
to?: string
|
|
35
20
|
}
|
|
36
21
|
|
|
37
|
-
export const CNavLink = forwardRef<
|
|
38
|
-
HTMLButtonElement | HTMLAnchorElement
|
|
22
|
+
export const CNavLink: PolymorphicRefForwardingComponent<'a', CNavLinkProps> = forwardRef<
|
|
23
|
+
HTMLButtonElement | HTMLAnchorElement,
|
|
39
24
|
CNavLinkProps
|
|
40
25
|
>(({ children, className, idx, ...rest }, ref) => {
|
|
41
26
|
const navLinkRef = useRef<HTMLAnchorElement>(null)
|
|
@@ -56,8 +41,11 @@ export const CNavLink = forwardRef<
|
|
|
56
41
|
})
|
|
57
42
|
|
|
58
43
|
CNavLink.propTypes = {
|
|
44
|
+
active: PropTypes.bool,
|
|
45
|
+
as: PropTypes.elementType,
|
|
59
46
|
children: PropTypes.node,
|
|
60
47
|
className: PropTypes.string,
|
|
48
|
+
disabled: PropTypes.bool,
|
|
61
49
|
idx: PropTypes.string,
|
|
62
50
|
}
|
|
63
51
|
|
|
@@ -1,25 +1,33 @@
|
|
|
1
|
-
import React, { forwardRef, HTMLAttributes } from 'react'
|
|
1
|
+
import React, { ElementType, forwardRef, HTMLAttributes } from 'react'
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
|
+
import { PolymorphicRefForwardingComponent } from '../../helpers'
|
|
6
|
+
|
|
5
7
|
export interface CNavTitleProps extends HTMLAttributes<HTMLLIElement> {
|
|
8
|
+
/**
|
|
9
|
+
* Component used for the root node. Either a string to use a HTML element or a component.
|
|
10
|
+
*/
|
|
11
|
+
as?: ElementType
|
|
6
12
|
/**
|
|
7
13
|
* A string of all className you want applied to the component.
|
|
8
14
|
*/
|
|
9
15
|
className?: string
|
|
10
16
|
}
|
|
11
17
|
|
|
12
|
-
export const CNavTitle
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
)
|
|
18
|
+
export const CNavTitle: PolymorphicRefForwardingComponent<'li', CNavTitleProps> = forwardRef<
|
|
19
|
+
HTMLLIElement,
|
|
20
|
+
CNavTitleProps
|
|
21
|
+
>(({ children, as: Component = 'li', className, ...rest }, ref) => {
|
|
22
|
+
return (
|
|
23
|
+
<Component className={classNames('nav-title', className)} {...rest} ref={ref}>
|
|
24
|
+
{children}
|
|
25
|
+
</Component>
|
|
26
|
+
)
|
|
27
|
+
})
|
|
21
28
|
|
|
22
29
|
CNavTitle.propTypes = {
|
|
30
|
+
as: PropTypes.elementType,
|
|
23
31
|
children: PropTypes.node,
|
|
24
32
|
className: PropTypes.string,
|
|
25
33
|
}
|
|
@@ -18,7 +18,7 @@ test('loads and displays CNav component', async () => {
|
|
|
18
18
|
|
|
19
19
|
test('CNav customize', async () => {
|
|
20
20
|
const { container } = render(
|
|
21
|
-
<CNav className="bazinga"
|
|
21
|
+
<CNav className="bazinga" as="h3" layout="justified" variant="pills">
|
|
22
22
|
Test
|
|
23
23
|
</CNav>,
|
|
24
24
|
)
|
|
@@ -10,7 +10,7 @@ test('loads and displays CNavItem component', async () => {
|
|
|
10
10
|
|
|
11
11
|
test('CNavItem customize', async () => {
|
|
12
12
|
const { container } = render(
|
|
13
|
-
<CNavItem active={true} className="bazinga"
|
|
13
|
+
<CNavItem active={true} className="bazinga" as="h3" disabled={true} href="/bazinga">
|
|
14
14
|
Test
|
|
15
15
|
</CNavItem>,
|
|
16
16
|
)
|
|
@@ -10,7 +10,7 @@ test('loads and displays CNavLink component', async () => {
|
|
|
10
10
|
|
|
11
11
|
test('CNavLink customize', async () => {
|
|
12
12
|
const { container } = render(
|
|
13
|
-
<CNavLink active={true} className="bazinga"
|
|
13
|
+
<CNavLink active={true} className="bazinga" as="h3" disabled={true} href="/bazinga">
|
|
14
14
|
Test
|
|
15
15
|
</CNavLink>,
|
|
16
16
|
)
|
|
@@ -2,10 +2,15 @@ import React, { ElementType, forwardRef, HTMLAttributes } from 'react'
|
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
|
+
import { PolymorphicRefForwardingComponent } from '../../helpers'
|
|
5
6
|
import { colorPropType } from '../../props'
|
|
6
7
|
import type { Colors } from '../../types'
|
|
7
8
|
|
|
8
9
|
export interface CNavbarProps extends HTMLAttributes<HTMLDivElement> {
|
|
10
|
+
/**
|
|
11
|
+
* Component used for the root node. Either a string to use a HTML element or a component.
|
|
12
|
+
*/
|
|
13
|
+
as?: ElementType
|
|
9
14
|
/**
|
|
10
15
|
* A string of all className you want applied to the component.
|
|
11
16
|
*/
|
|
@@ -20,10 +25,6 @@ export interface CNavbarProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
20
25
|
* Sets if the color of text should be colored for a light or dark background.
|
|
21
26
|
*/
|
|
22
27
|
colorScheme?: 'dark' | 'light'
|
|
23
|
-
/**
|
|
24
|
-
* Component used for the root node. Either a string to use a HTML element or a component.
|
|
25
|
-
*/
|
|
26
|
-
component?: string | ElementType
|
|
27
28
|
/**
|
|
28
29
|
* Defines optional container wrapping children elements.
|
|
29
30
|
*/
|
|
@@ -38,14 +39,17 @@ export interface CNavbarProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
38
39
|
placement?: 'fixed-top' | 'fixed-bottom' | 'sticky-top'
|
|
39
40
|
}
|
|
40
41
|
|
|
41
|
-
export const CNavbar
|
|
42
|
+
export const CNavbar: PolymorphicRefForwardingComponent<'nav', CNavbarProps> = forwardRef<
|
|
43
|
+
HTMLDivElement,
|
|
44
|
+
CNavbarProps
|
|
45
|
+
>(
|
|
42
46
|
(
|
|
43
47
|
{
|
|
44
48
|
children,
|
|
49
|
+
as: Component = 'nav',
|
|
45
50
|
className,
|
|
46
51
|
color,
|
|
47
52
|
colorScheme,
|
|
48
|
-
component: Component = 'nav',
|
|
49
53
|
container,
|
|
50
54
|
expand,
|
|
51
55
|
placement,
|
|
@@ -81,11 +85,11 @@ export const CNavbar = forwardRef<HTMLDivElement, CNavbarProps>(
|
|
|
81
85
|
)
|
|
82
86
|
|
|
83
87
|
CNavbar.propTypes = {
|
|
88
|
+
as: PropTypes.elementType,
|
|
84
89
|
children: PropTypes.node,
|
|
85
90
|
className: PropTypes.string,
|
|
86
91
|
color: colorPropType,
|
|
87
92
|
colorScheme: PropTypes.oneOf(['dark', 'light']),
|
|
88
|
-
component: PropTypes.elementType,
|
|
89
93
|
container: PropTypes.oneOfType([
|
|
90
94
|
PropTypes.bool,
|
|
91
95
|
PropTypes.oneOf<'sm' | 'md' | 'lg' | 'xl' | 'xxl' | 'fluid'>([
|
|
@@ -2,38 +2,41 @@ import React, { ElementType, forwardRef, HTMLAttributes } from 'react'
|
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
|
+
import { PolymorphicRefForwardingComponent } from '../../helpers'
|
|
6
|
+
|
|
5
7
|
export interface CNavbarBrandProps extends HTMLAttributes<HTMLAnchorElement | HTMLSpanElement> {
|
|
6
|
-
/**
|
|
7
|
-
* A string of all className you want applied to the component.
|
|
8
|
-
*/
|
|
9
|
-
className?: string
|
|
10
8
|
/**
|
|
11
9
|
* Component used for the root node. Either a string to use a HTML element or a component.
|
|
12
10
|
*
|
|
13
11
|
*/
|
|
14
|
-
|
|
12
|
+
as?: ElementType
|
|
13
|
+
/**
|
|
14
|
+
* A string of all className you want applied to the component.
|
|
15
|
+
*/
|
|
16
|
+
className?: string
|
|
15
17
|
/**
|
|
16
18
|
* The href attribute specifies the URL of the page the link goes to.
|
|
17
19
|
*/
|
|
18
20
|
href?: string
|
|
19
21
|
}
|
|
20
22
|
|
|
21
|
-
export const CNavbarBrand
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
export const CNavbarBrand: PolymorphicRefForwardingComponent<'a', CNavbarBrandProps> = forwardRef<
|
|
24
|
+
HTMLAnchorElement | HTMLSpanElement,
|
|
25
|
+
CNavbarBrandProps
|
|
26
|
+
>(({ children, as, className, ...rest }, ref) => {
|
|
27
|
+
const Component = as ?? (rest.href ? 'a' : 'span')
|
|
24
28
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
)
|
|
29
|
+
return (
|
|
30
|
+
<Component className={classNames('navbar-brand', className)} {...rest} ref={ref}>
|
|
31
|
+
{children}
|
|
32
|
+
</Component>
|
|
33
|
+
)
|
|
34
|
+
})
|
|
32
35
|
|
|
33
36
|
CNavbarBrand.propTypes = {
|
|
37
|
+
as: PropTypes.elementType,
|
|
34
38
|
children: PropTypes.node,
|
|
35
39
|
className: PropTypes.string,
|
|
36
|
-
component: PropTypes.elementType,
|
|
37
40
|
}
|
|
38
41
|
|
|
39
42
|
CNavbarBrand.displayName = 'CNavbarBrand'
|
|
@@ -2,36 +2,39 @@ import React, { ElementType, forwardRef, HTMLAttributes } from 'react'
|
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
|
+
import { PolymorphicRefForwardingComponent } from '../../helpers'
|
|
6
|
+
|
|
5
7
|
export interface CNavbarNavProps extends HTMLAttributes<HTMLDivElement | HTMLUListElement> {
|
|
6
8
|
/**
|
|
7
|
-
*
|
|
9
|
+
* Component used for the root node. Either a string to use a HTML element or a component.
|
|
8
10
|
*/
|
|
9
|
-
|
|
11
|
+
as?: ElementType
|
|
10
12
|
/**
|
|
11
|
-
*
|
|
13
|
+
* A string of all className you want applied to the component.
|
|
12
14
|
*/
|
|
13
|
-
|
|
15
|
+
className?: string
|
|
14
16
|
}
|
|
15
17
|
|
|
16
|
-
export const CNavbarNav
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
)
|
|
18
|
+
export const CNavbarNav: PolymorphicRefForwardingComponent<'ul', CNavbarNavProps> = forwardRef<
|
|
19
|
+
HTMLDivElement | HTMLUListElement,
|
|
20
|
+
CNavbarNavProps
|
|
21
|
+
>(({ children, as: Component = 'ul', className, ...rest }, ref) => {
|
|
22
|
+
return (
|
|
23
|
+
<Component
|
|
24
|
+
className={classNames('navbar-nav', className)}
|
|
25
|
+
role="navigation"
|
|
26
|
+
ref={ref}
|
|
27
|
+
{...rest}
|
|
28
|
+
>
|
|
29
|
+
{children}
|
|
30
|
+
</Component>
|
|
31
|
+
)
|
|
32
|
+
})
|
|
30
33
|
|
|
31
34
|
CNavbarNav.propTypes = {
|
|
35
|
+
as: PropTypes.elementType,
|
|
32
36
|
children: PropTypes.node,
|
|
33
37
|
className: PropTypes.string,
|
|
34
|
-
component: PropTypes.elementType,
|
|
35
38
|
}
|
|
36
39
|
|
|
37
40
|
CNavbarNav.displayName = 'CNavbarNav'
|
|
@@ -15,7 +15,7 @@ test('CNavbarBrand witch href', async () => {
|
|
|
15
15
|
|
|
16
16
|
test('CNavbarBrand customize', async () => {
|
|
17
17
|
const { container } = render(
|
|
18
|
-
<CNavbarBrand className="bazinga"
|
|
18
|
+
<CNavbarBrand className="bazinga" as="h3" href="/bazinga">
|
|
19
19
|
Test
|
|
20
20
|
</CNavbarBrand>,
|
|
21
21
|
)
|