@coreui/react-pro 5.11.0 → 5.13.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.map +1 -1
- package/dist/cjs/components/accordion/CAccordionBody.js +2 -2
- package/dist/cjs/components/accordion/CAccordionBody.js.map +1 -1
- package/dist/cjs/components/accordion/CAccordionItem.d.ts +4 -0
- package/dist/cjs/components/accordion/CAccordionItem.js +4 -4
- package/dist/cjs/components/accordion/CAccordionItem.js.map +1 -1
- package/dist/cjs/components/alert/CAlert.js.map +1 -1
- package/dist/cjs/components/alert/CAlertHeading.js.map +1 -1
- package/dist/cjs/components/backdrop/CBackdrop.js.map +1 -1
- package/dist/cjs/components/badge/CBadge.js.map +1 -1
- package/dist/cjs/components/button/CButton.js.map +1 -1
- package/dist/cjs/components/calendar/CCalendar.js +53 -38
- package/dist/cjs/components/calendar/CCalendar.js.map +1 -1
- package/dist/cjs/components/calendar/CCalendarNavigation.js.map +1 -1
- package/dist/cjs/components/calendar/CCalendarPanel.js.map +1 -1
- package/dist/cjs/components/calendar/utils.d.ts +8 -0
- package/dist/cjs/components/calendar/utils.js +16 -0
- package/dist/cjs/components/calendar/utils.js.map +1 -1
- package/dist/cjs/components/card/CCardHeader.js.map +1 -1
- package/dist/cjs/components/card/CCardSubtitle.js.map +1 -1
- package/dist/cjs/components/card/CCardText.js.map +1 -1
- package/dist/cjs/components/card/CCardTitle.js.map +1 -1
- package/dist/cjs/components/carousel/CCarousel.js.map +1 -1
- package/dist/cjs/components/carousel/CCarouselItem.js.map +1 -1
- package/dist/cjs/components/date-picker/CDatePicker.js.map +1 -1
- package/dist/cjs/components/date-range-picker/CDateRangePicker.js +53 -33
- package/dist/cjs/components/date-range-picker/CDateRangePicker.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdown.d.ts +77 -20
- package/dist/cjs/components/dropdown/CDropdown.js +6 -3
- package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownHeader.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownItem.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownItemPlain.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownMenu.js +1 -1
- package/dist/cjs/components/dropdown/CDropdownMenu.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
- package/dist/cjs/components/form/CFormCheck.js.map +1 -1
- package/dist/cjs/components/form/CFormFeedback.js.map +1 -1
- package/dist/cjs/components/form/CFormInput.js.map +1 -1
- package/dist/cjs/components/form/CFormLabel.js.map +1 -1
- package/dist/cjs/components/form/CFormText.js.map +1 -1
- package/dist/cjs/components/form/CInputGroupText.js.map +1 -1
- package/dist/cjs/components/header/CHeaderBrand.js.map +1 -1
- package/dist/cjs/components/header/CHeaderNav.js.map +1 -1
- package/dist/cjs/components/header/CHeaderToggler.js.map +1 -1
- package/dist/cjs/components/index.d.ts +1 -0
- package/dist/cjs/components/link/CLink.js.map +1 -1
- package/dist/cjs/components/list-group/CListGroup.js.map +1 -1
- package/dist/cjs/components/list-group/CListGroupItem.js.map +1 -1
- package/dist/cjs/components/loading-button/CLoadingButton.js.map +1 -1
- package/dist/cjs/components/modal/CModal.js.map +1 -1
- package/dist/cjs/components/modal/CModalHeader.js.map +1 -1
- package/dist/cjs/components/modal/CModalTitle.js.map +1 -1
- package/dist/cjs/components/multi-select/CMultiSelect.d.ts +6 -0
- package/dist/cjs/components/multi-select/CMultiSelect.js +21 -4
- package/dist/cjs/components/multi-select/CMultiSelect.js.map +1 -1
- package/dist/cjs/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
- package/dist/cjs/components/multi-select/CMultiSelectOptions.js.map +1 -1
- package/dist/cjs/components/multi-select/CMultiSelectSelection.js.map +1 -1
- package/dist/cjs/components/nav/CNav.js.map +1 -1
- package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
- package/dist/cjs/components/nav/CNavGroupItems.js.map +1 -1
- package/dist/cjs/components/nav/CNavItem.js.map +1 -1
- package/dist/cjs/components/nav/CNavLink.js.map +1 -1
- package/dist/cjs/components/nav/CNavTitle.js.map +1 -1
- package/dist/cjs/components/navbar/CNavbar.js.map +1 -1
- package/dist/cjs/components/navbar/CNavbarBrand.js.map +1 -1
- package/dist/cjs/components/navbar/CNavbarNav.js.map +1 -1
- package/dist/cjs/components/navbar/CNavbarToggler.js.map +1 -1
- package/dist/cjs/components/offcanvas/COffcanvas.js.map +1 -1
- package/dist/cjs/components/offcanvas/COffcanvasTitle.js.map +1 -1
- package/dist/cjs/components/pagination/CPaginationItem.js.map +1 -1
- package/dist/cjs/components/password-input/CPasswordInput.d.ts +43 -0
- package/dist/cjs/components/password-input/CPasswordInput.js +35 -0
- package/dist/cjs/components/password-input/CPasswordInput.js.map +1 -0
- package/dist/cjs/components/password-input/index.d.ts +2 -0
- package/dist/cjs/components/picker/CPicker.js.map +1 -1
- package/dist/cjs/components/placeholder/CPlaceholder.js.map +1 -1
- package/dist/cjs/components/popover/CPopover.d.ts +75 -20
- package/dist/cjs/components/popover/CPopover.js +8 -21
- package/dist/cjs/components/popover/CPopover.js.map +1 -1
- package/dist/cjs/components/progress/CProgressBar.js.map +1 -1
- package/dist/cjs/components/range-slider/CRangeSlider.js.map +1 -1
- package/dist/cjs/components/rating/CRating.js.map +1 -1
- package/dist/cjs/components/sidebar/CSidebar.js.map +1 -1
- package/dist/cjs/components/sidebar/CSidebarBrand.js.map +1 -1
- package/dist/cjs/components/sidebar/CSidebarNav.js.map +1 -1
- package/dist/cjs/components/smart-pagination/CSmartPagination.js.map +1 -1
- package/dist/cjs/components/smart-table/CSmartTable.js.map +1 -1
- package/dist/cjs/components/smart-table/CSmartTableBody.js.map +1 -1
- package/dist/cjs/components/smart-table/CSmartTableHead.js +3 -1
- package/dist/cjs/components/smart-table/CSmartTableHead.js.map +1 -1
- package/dist/cjs/components/smart-table/types.d.ts +1 -1
- package/dist/cjs/components/smart-table/utils.js.map +1 -1
- package/dist/cjs/components/spinner/CSpinner.js.map +1 -1
- package/dist/cjs/components/tabs/CTab.js.map +1 -1
- package/dist/cjs/components/tabs/CTabList.js.map +1 -1
- package/dist/cjs/components/tabs/CTabPane.js.map +1 -1
- package/dist/cjs/components/tabs/CTabPanel.js.map +1 -1
- package/dist/cjs/components/time-picker/CTimePicker.js +13 -7
- package/dist/cjs/components/time-picker/CTimePicker.js.map +1 -1
- package/dist/cjs/components/time-picker/CTimePickerRollCol.js.map +1 -1
- package/dist/cjs/components/time-picker/utils.d.ts +10 -0
- package/dist/cjs/components/time-picker/utils.js +25 -9
- package/dist/cjs/components/time-picker/utils.js.map +1 -1
- package/dist/cjs/components/toast/CToast.js.map +1 -1
- package/dist/cjs/components/tooltip/CTooltip.d.ts +67 -15
- package/dist/cjs/components/tooltip/CTooltip.js +8 -21
- package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
- package/dist/cjs/components/widgets/CWidgetStatsF.js.map +1 -1
- package/dist/cjs/hooks/useClipboard.js.map +1 -1
- package/dist/cjs/hooks/useColorModes.js +5 -5
- package/dist/cjs/hooks/useColorModes.js.map +1 -1
- package/dist/cjs/hooks/useDebouncedCallback.js.map +1 -1
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/node_modules/@coreui/icons-react/dist/index.esm.js.map +1 -1
- package/dist/cjs/node_modules/dom-helpers/esm/hasClass.js.map +1 -1
- package/dist/cjs/node_modules/react-device-detect/dist/lib.js +1 -1
- package/dist/cjs/node_modules/react-device-detect/dist/lib.js.map +1 -1
- package/dist/cjs/node_modules/react-transition-group/esm/CSSTransition.js +9 -9
- package/dist/cjs/node_modules/react-transition-group/esm/CSSTransition.js.map +1 -1
- package/dist/cjs/node_modules/react-transition-group/esm/Transition.js.map +1 -1
- package/dist/cjs/node_modules/tslib/tslib.es6.js.map +1 -1
- package/dist/cjs/node_modules/ua-parser-js/dist/ua-parser.min.js.map +1 -1
- package/dist/cjs/utils/executeAfterTransition.js.map +1 -1
- package/dist/cjs/utils/getNextActiveElement.js.map +1 -1
- package/dist/cjs/utils/isObjectInArray.js.map +1 -1
- package/dist/esm/components/accordion/CAccordion.js.map +1 -1
- package/dist/esm/components/accordion/CAccordionBody.js +2 -2
- package/dist/esm/components/accordion/CAccordionBody.js.map +1 -1
- package/dist/esm/components/accordion/CAccordionItem.d.ts +4 -0
- package/dist/esm/components/accordion/CAccordionItem.js +4 -4
- package/dist/esm/components/accordion/CAccordionItem.js.map +1 -1
- package/dist/esm/components/alert/CAlert.js.map +1 -1
- package/dist/esm/components/alert/CAlertHeading.js.map +1 -1
- package/dist/esm/components/avatar/CAvatar.js +1 -1
- package/dist/esm/components/backdrop/CBackdrop.js.map +1 -1
- package/dist/esm/components/badge/CBadge.js +1 -1
- package/dist/esm/components/badge/CBadge.js.map +1 -1
- package/dist/esm/components/button/CButton.js.map +1 -1
- package/dist/esm/components/calendar/CCalendar.js +54 -39
- package/dist/esm/components/calendar/CCalendar.js.map +1 -1
- package/dist/esm/components/calendar/CCalendarNavigation.js.map +1 -1
- package/dist/esm/components/calendar/CCalendarPanel.js.map +1 -1
- package/dist/esm/components/calendar/utils.d.ts +8 -0
- package/dist/esm/components/calendar/utils.js +16 -1
- package/dist/esm/components/calendar/utils.js.map +1 -1
- package/dist/esm/components/card/CCardHeader.js.map +1 -1
- package/dist/esm/components/card/CCardSubtitle.js.map +1 -1
- package/dist/esm/components/card/CCardText.js.map +1 -1
- package/dist/esm/components/card/CCardTitle.js.map +1 -1
- package/dist/esm/components/carousel/CCarousel.js.map +1 -1
- package/dist/esm/components/carousel/CCarouselItem.js.map +1 -1
- package/dist/esm/components/date-picker/CDatePicker.js.map +1 -1
- package/dist/esm/components/date-range-picker/CDateRangePicker.js +47 -27
- package/dist/esm/components/date-range-picker/CDateRangePicker.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdown.d.ts +77 -20
- package/dist/esm/components/dropdown/CDropdown.js +6 -3
- package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownHeader.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownItem.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownItemPlain.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownMenu.js +1 -1
- package/dist/esm/components/dropdown/CDropdownMenu.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
- package/dist/esm/components/form/CFormCheck.js.map +1 -1
- package/dist/esm/components/form/CFormFeedback.js.map +1 -1
- package/dist/esm/components/form/CFormInput.js.map +1 -1
- package/dist/esm/components/form/CFormLabel.js.map +1 -1
- package/dist/esm/components/form/CFormText.js.map +1 -1
- package/dist/esm/components/form/CInputGroupText.js.map +1 -1
- package/dist/esm/components/header/CHeaderBrand.js.map +1 -1
- package/dist/esm/components/header/CHeaderNav.js.map +1 -1
- package/dist/esm/components/header/CHeaderToggler.js.map +1 -1
- package/dist/esm/components/index.d.ts +1 -0
- package/dist/esm/components/link/CLink.js.map +1 -1
- package/dist/esm/components/list-group/CListGroup.js.map +1 -1
- package/dist/esm/components/list-group/CListGroupItem.js.map +1 -1
- package/dist/esm/components/loading-button/CLoadingButton.js.map +1 -1
- package/dist/esm/components/modal/CModal.js.map +1 -1
- package/dist/esm/components/modal/CModalHeader.js.map +1 -1
- package/dist/esm/components/modal/CModalTitle.js.map +1 -1
- package/dist/esm/components/multi-select/CMultiSelect.d.ts +6 -0
- package/dist/esm/components/multi-select/CMultiSelect.js +22 -5
- package/dist/esm/components/multi-select/CMultiSelect.js.map +1 -1
- package/dist/esm/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
- package/dist/esm/components/multi-select/CMultiSelectOptions.js.map +1 -1
- package/dist/esm/components/multi-select/CMultiSelectSelection.js.map +1 -1
- package/dist/esm/components/nav/CNav.js.map +1 -1
- package/dist/esm/components/nav/CNavGroup.js.map +1 -1
- package/dist/esm/components/nav/CNavGroupItems.js.map +1 -1
- package/dist/esm/components/nav/CNavItem.js.map +1 -1
- package/dist/esm/components/nav/CNavLink.js.map +1 -1
- package/dist/esm/components/nav/CNavTitle.js.map +1 -1
- package/dist/esm/components/navbar/CNavbar.js.map +1 -1
- package/dist/esm/components/navbar/CNavbarBrand.js.map +1 -1
- package/dist/esm/components/navbar/CNavbarNav.js.map +1 -1
- package/dist/esm/components/navbar/CNavbarToggler.js.map +1 -1
- package/dist/esm/components/offcanvas/COffcanvas.js.map +1 -1
- package/dist/esm/components/offcanvas/COffcanvasTitle.js.map +1 -1
- package/dist/esm/components/pagination/CPaginationItem.js.map +1 -1
- package/dist/esm/components/password-input/CPasswordInput.d.ts +43 -0
- package/dist/esm/components/password-input/CPasswordInput.js +33 -0
- package/dist/esm/components/password-input/CPasswordInput.js.map +1 -0
- package/dist/esm/components/password-input/index.d.ts +2 -0
- package/dist/esm/components/picker/CPicker.js.map +1 -1
- package/dist/esm/components/placeholder/CPlaceholder.js.map +1 -1
- package/dist/esm/components/popover/CPopover.d.ts +75 -20
- package/dist/esm/components/popover/CPopover.js +9 -22
- package/dist/esm/components/popover/CPopover.js.map +1 -1
- package/dist/esm/components/progress/CProgressBar.js.map +1 -1
- package/dist/esm/components/range-slider/CRangeSlider.js.map +1 -1
- package/dist/esm/components/rating/CRating.js.map +1 -1
- package/dist/esm/components/sidebar/CSidebar.js.map +1 -1
- package/dist/esm/components/sidebar/CSidebarBrand.js.map +1 -1
- package/dist/esm/components/sidebar/CSidebarNav.js.map +1 -1
- package/dist/esm/components/smart-pagination/CSmartPagination.js.map +1 -1
- package/dist/esm/components/smart-table/CSmartTable.js.map +1 -1
- package/dist/esm/components/smart-table/CSmartTableBody.js.map +1 -1
- package/dist/esm/components/smart-table/CSmartTableHead.js +3 -1
- package/dist/esm/components/smart-table/CSmartTableHead.js.map +1 -1
- package/dist/esm/components/smart-table/types.d.ts +1 -1
- package/dist/esm/components/smart-table/utils.js +1 -1
- package/dist/esm/components/smart-table/utils.js.map +1 -1
- package/dist/esm/components/spinner/CSpinner.js.map +1 -1
- package/dist/esm/components/tabs/CTab.js.map +1 -1
- package/dist/esm/components/tabs/CTabList.js.map +1 -1
- package/dist/esm/components/tabs/CTabPane.js.map +1 -1
- package/dist/esm/components/tabs/CTabPanel.js.map +1 -1
- package/dist/esm/components/time-picker/CTimePicker.js +14 -8
- package/dist/esm/components/time-picker/CTimePicker.js.map +1 -1
- package/dist/esm/components/time-picker/CTimePickerRollCol.js.map +1 -1
- package/dist/esm/components/time-picker/utils.d.ts +10 -0
- package/dist/esm/components/time-picker/utils.js +25 -10
- package/dist/esm/components/time-picker/utils.js.map +1 -1
- package/dist/esm/components/toast/CToast.js.map +1 -1
- package/dist/esm/components/tooltip/CTooltip.d.ts +67 -15
- package/dist/esm/components/tooltip/CTooltip.js +9 -22
- package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
- package/dist/esm/components/widgets/CWidgetStatsF.js.map +1 -1
- package/dist/esm/hooks/useClipboard.js.map +1 -1
- package/dist/esm/hooks/useColorModes.js +5 -5
- package/dist/esm/hooks/useColorModes.js.map +1 -1
- package/dist/esm/hooks/useDebouncedCallback.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/node_modules/@coreui/icons-react/dist/index.esm.js.map +1 -1
- package/dist/esm/node_modules/dom-helpers/esm/hasClass.js.map +1 -1
- package/dist/esm/node_modules/react-device-detect/dist/lib.js +1 -1
- package/dist/esm/node_modules/react-device-detect/dist/lib.js.map +1 -1
- package/dist/esm/node_modules/react-transition-group/esm/Transition.js.map +1 -1
- package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -1
- package/dist/esm/node_modules/ua-parser-js/dist/ua-parser.min.js.map +1 -1
- package/dist/esm/utils/executeAfterTransition.js.map +1 -1
- package/dist/esm/utils/getNextActiveElement.js.map +1 -1
- package/dist/esm/utils/isObjectInArray.js.map +1 -1
- package/package.json +9 -9
- package/src/components/accordion/CAccordionBody.tsx +3 -3
- package/src/components/accordion/CAccordionItem.tsx +9 -5
- package/src/components/calendar/CCalendar.tsx +74 -56
- package/src/components/calendar/CCalendarNavigation.tsx +2 -2
- package/src/components/calendar/CCalendarPanel.tsx +4 -4
- package/src/components/calendar/utils.ts +33 -10
- package/src/components/date-picker/CDatePicker.tsx +1 -1
- package/src/components/date-range-picker/CDateRangePicker.tsx +37 -21
- package/src/components/dropdown/CDropdown.tsx +106 -26
- package/src/components/dropdown/CDropdownMenu.tsx +0 -1
- package/src/components/index.ts +1 -0
- package/src/components/multi-select/CMultiSelect.tsx +49 -14
- package/src/components/password-input/CPasswordInput.tsx +164 -0
- package/src/components/password-input/index.ts +3 -0
- package/src/components/popover/CPopover.tsx +103 -43
- package/src/components/smart-table/CSmartTableHead.tsx +3 -0
- package/src/components/smart-table/types.ts +7 -1
- package/src/components/time-picker/CTimePicker.tsx +19 -12
- package/src/components/time-picker/utils.ts +30 -14
- package/src/components/tooltip/CTooltip.tsx +94 -38
- package/src/hooks/useColorModes.ts +5 -5
|
@@ -10,6 +10,7 @@ import React, {
|
|
|
10
10
|
} from 'react'
|
|
11
11
|
import PropTypes from 'prop-types'
|
|
12
12
|
import classNames from 'classnames'
|
|
13
|
+
import type { Options } from '@popperjs/core'
|
|
13
14
|
|
|
14
15
|
import { PolymorphicRefForwardingComponent } from '../../helpers'
|
|
15
16
|
import { useForkedRef, usePopper } from '../../hooks'
|
|
@@ -22,77 +23,148 @@ import { getPlacement } from './utils'
|
|
|
22
23
|
|
|
23
24
|
export interface CDropdownProps extends HTMLAttributes<HTMLDivElement | HTMLLIElement> {
|
|
24
25
|
/**
|
|
25
|
-
*
|
|
26
|
+
* Specifies the alignment of the React Dropdown Menu within this React Dropdown.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* // Align dropdown menu to the end on large devices, otherwise start
|
|
30
|
+
* <CDropdown alignment={{ lg: 'end', xs: 'start' }}>
|
|
31
|
+
* <CDropdownToggle>Toggle dropdown</CDropdownToggle>
|
|
32
|
+
* <CDropdownMenu>
|
|
33
|
+
* <CDropdownItem>Action</CDropdownItem>
|
|
34
|
+
* <CDropdownItem>Another Action</CDropdownItem>
|
|
35
|
+
* </CDropdownMenu>
|
|
36
|
+
* </CDropdown>
|
|
26
37
|
*
|
|
27
38
|
* @type 'start' | 'end' | { xs: 'start' | 'end' } | { sm: 'start' | 'end' } | { md: 'start' | 'end' } | { lg: 'start' | 'end' } | { xl: 'start' | 'end'} | { xxl: 'start' | 'end'}
|
|
28
39
|
*/
|
|
29
40
|
alignment?: Alignments
|
|
41
|
+
|
|
30
42
|
/**
|
|
31
|
-
*
|
|
43
|
+
* Determines the root node component (native HTML element or a custom React component) for the React Dropdown.
|
|
32
44
|
*/
|
|
33
45
|
as?: ElementType
|
|
46
|
+
|
|
34
47
|
/**
|
|
35
|
-
*
|
|
36
|
-
* - `true` -
|
|
37
|
-
* - `false` -
|
|
38
|
-
* - `'inside'` -
|
|
39
|
-
* - `'outside'` -
|
|
48
|
+
* Configures automatic closing behavior for the React Dropdown:
|
|
49
|
+
* - `true` - Close on clicks inside or outside of the React Dropdown Menu.
|
|
50
|
+
* - `false` - Disable auto-close; manually call `hide` or `toggle` (also not closed by `Escape`).
|
|
51
|
+
* - `'inside'` - Close only when clicking inside the React Dropdown Menu.
|
|
52
|
+
* - `'outside'` - Close only when clicking outside the React Dropdown Menu.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* // Close only when user clicks outside of the menu
|
|
56
|
+
* <CDropdown autoClose="outside" />
|
|
40
57
|
*/
|
|
41
58
|
autoClose?: 'inside' | 'outside' | boolean
|
|
59
|
+
|
|
42
60
|
/**
|
|
43
|
-
*
|
|
61
|
+
* Adds custom classes to the React Dropdown root element.
|
|
44
62
|
*/
|
|
45
63
|
className?: string
|
|
64
|
+
|
|
46
65
|
/**
|
|
47
|
-
* Appends the
|
|
66
|
+
* Appends the React Dropdown Menu to a specific element. You can pass an HTML element or a function returning an element. Defaults to `document.body`.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* // Append the menu to a custom container
|
|
70
|
+
* const myContainer = document.getElementById('my-container')
|
|
71
|
+
*
|
|
72
|
+
* <CDropdown container={myContainer} />
|
|
48
73
|
*
|
|
49
74
|
* @since 4.11.0
|
|
50
75
|
*/
|
|
51
76
|
container?: DocumentFragment | Element | (() => DocumentFragment | Element | null) | null
|
|
77
|
+
|
|
52
78
|
/**
|
|
53
|
-
*
|
|
79
|
+
* Applies a darker color scheme to the React Dropdown Menu, often used within dark navbars.
|
|
54
80
|
*/
|
|
55
81
|
dark?: boolean
|
|
82
|
+
|
|
56
83
|
/**
|
|
57
|
-
*
|
|
84
|
+
* Specifies the direction of the React Dropdown.
|
|
58
85
|
*/
|
|
59
86
|
direction?: 'center' | 'dropup' | 'dropup-center' | 'dropend' | 'dropstart'
|
|
87
|
+
|
|
60
88
|
/**
|
|
61
|
-
*
|
|
89
|
+
* Defines x and y offsets ([x, y]) for the React Dropdown Menu relative to its target.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* // Offset the menu 10px in X and 5px in Y direction
|
|
93
|
+
* <CDropdown offset={[10, 5]}>
|
|
94
|
+
* ...
|
|
95
|
+
* </CDropdown>
|
|
62
96
|
*/
|
|
63
97
|
offset?: [number, number]
|
|
98
|
+
|
|
64
99
|
/**
|
|
65
|
-
* Callback fired
|
|
100
|
+
* Callback fired right before the React Dropdown becomes hidden.
|
|
66
101
|
*
|
|
67
102
|
* @since 4.9.0
|
|
68
103
|
*/
|
|
69
104
|
onHide?: () => void
|
|
105
|
+
|
|
70
106
|
/**
|
|
71
|
-
* Callback fired
|
|
107
|
+
* Callback fired immediately after the React Dropdown is displayed.
|
|
72
108
|
*/
|
|
73
109
|
onShow?: () => void
|
|
110
|
+
|
|
74
111
|
/**
|
|
75
|
-
*
|
|
112
|
+
* Determines the placement of the React Dropdown Menu after Popper.js modifiers.
|
|
76
113
|
*
|
|
77
|
-
* @type 'auto' | 'top-end' | 'top' | 'top-start' | 'bottom-end' | 'bottom' | 'bottom-start' | 'right-start' | 'right' | 'right-end' | 'left-start' | 'left' | 'left-end'
|
|
114
|
+
* @type 'auto' | 'auto-start' | 'auto-end' | 'top-end' | 'top' | 'top-start' | 'bottom-end' | 'bottom' | 'bottom-start' | 'right-start' | 'right' | 'right-end' | 'left-start' | 'left' | 'left-end'
|
|
78
115
|
*/
|
|
79
116
|
placement?: Placements
|
|
117
|
+
|
|
80
118
|
/**
|
|
81
|
-
*
|
|
119
|
+
* Enables or disables dynamic positioning via Popper.js for the React Dropdown Menu.
|
|
82
120
|
*/
|
|
83
121
|
popper?: boolean
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Provides a custom Popper.js configuration or a function that returns a modified Popper.js configuration for advanced positioning of the React Dropdown Menu. [Read more](https://popper.js.org/docs/v2/constructors/#options)
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* // Providing a custom popper config
|
|
128
|
+
* <CDropdown
|
|
129
|
+
* popperConfig={{
|
|
130
|
+
* modifiers: [
|
|
131
|
+
* {
|
|
132
|
+
* name: 'flip',
|
|
133
|
+
* options: { fallbackPlacements: ['bottom', 'top'] },
|
|
134
|
+
* },
|
|
135
|
+
* ],
|
|
136
|
+
* }}
|
|
137
|
+
* >...</CDropdown>
|
|
138
|
+
*
|
|
139
|
+
* @since 5.5.0
|
|
140
|
+
*/
|
|
141
|
+
popperConfig?: Partial<Options> | ((defaultPopperConfig: Partial<Options>) => Partial<Options>)
|
|
142
|
+
|
|
84
143
|
/**
|
|
85
|
-
*
|
|
144
|
+
* Renders the React Dropdown Menu using a React Portal, allowing it to escape the DOM hierarchy for improved positioning.
|
|
86
145
|
*
|
|
87
146
|
* @since 4.8.0
|
|
88
147
|
*/
|
|
89
148
|
portal?: boolean
|
|
149
|
+
|
|
90
150
|
/**
|
|
91
|
-
*
|
|
151
|
+
* Defines the visual variant of the React Dropdown
|
|
92
152
|
*/
|
|
93
153
|
variant?: 'btn-group' | 'dropdown' | 'input-group' | 'nav-item'
|
|
154
|
+
|
|
94
155
|
/**
|
|
95
|
-
*
|
|
156
|
+
* Controls the visibility of the React Dropdown Menu:
|
|
157
|
+
* - `true` - Visible
|
|
158
|
+
* - `false` - Hidden
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* // Programmatically manage the dropdown visibility
|
|
162
|
+
* const [visible, setVisible] = useState(false)
|
|
163
|
+
*
|
|
164
|
+
* <CDropdown visible={visible}>
|
|
165
|
+
* ...
|
|
166
|
+
* </CDropdown>
|
|
167
|
+
*
|
|
96
168
|
*/
|
|
97
169
|
visible?: boolean
|
|
98
170
|
}
|
|
@@ -126,12 +198,13 @@ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>
|
|
|
126
198
|
onShow,
|
|
127
199
|
placement = 'bottom-start',
|
|
128
200
|
popper = true,
|
|
201
|
+
popperConfig,
|
|
129
202
|
portal = false,
|
|
130
203
|
variant = 'btn-group',
|
|
131
204
|
visible = false,
|
|
132
205
|
...rest
|
|
133
206
|
},
|
|
134
|
-
ref
|
|
207
|
+
ref
|
|
135
208
|
) => {
|
|
136
209
|
const dropdownRef = useRef<HTMLDivElement>(null)
|
|
137
210
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -161,7 +234,7 @@ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>
|
|
|
161
234
|
setVisible,
|
|
162
235
|
}
|
|
163
236
|
|
|
164
|
-
const
|
|
237
|
+
const defaultPopperConfig = {
|
|
165
238
|
modifiers: [
|
|
166
239
|
{
|
|
167
240
|
name: 'offset',
|
|
@@ -173,6 +246,11 @@ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>
|
|
|
173
246
|
placement: getPlacement(placement, direction, alignment, isRTL(dropdownMenuRef.current)),
|
|
174
247
|
}
|
|
175
248
|
|
|
249
|
+
const computedPopperConfig: Partial<Options> = {
|
|
250
|
+
...defaultPopperConfig,
|
|
251
|
+
...(typeof popperConfig === 'function' ? popperConfig(defaultPopperConfig) : popperConfig),
|
|
252
|
+
}
|
|
253
|
+
|
|
176
254
|
useEffect(() => {
|
|
177
255
|
setVisible(visible)
|
|
178
256
|
}, [visible])
|
|
@@ -180,7 +258,8 @@ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>
|
|
|
180
258
|
useEffect(() => {
|
|
181
259
|
if (_visible && dropdownToggleRef.current && dropdownMenuRef.current) {
|
|
182
260
|
dropdownToggleRef.current.focus()
|
|
183
|
-
popper &&
|
|
261
|
+
popper &&
|
|
262
|
+
initPopper(dropdownToggleRef.current, dropdownMenuRef.current, computedPopperConfig)
|
|
184
263
|
window.addEventListener('mouseup', handleMouseUp)
|
|
185
264
|
window.addEventListener('keyup', handleKeyup)
|
|
186
265
|
dropdownToggleRef.current.addEventListener('keydown', handleKeydown)
|
|
@@ -209,7 +288,7 @@ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>
|
|
|
209
288
|
event.preventDefault()
|
|
210
289
|
const target = event.target as HTMLElement
|
|
211
290
|
const items: HTMLElement[] = Array.from(
|
|
212
|
-
dropdownMenuRef.current.querySelectorAll('.dropdown-item:not(.disabled):not(:disabled)')
|
|
291
|
+
dropdownMenuRef.current.querySelectorAll('.dropdown-item:not(.disabled):not(:disabled)')
|
|
213
292
|
)
|
|
214
293
|
getNextActiveElement(items, target, event.key === 'ArrowDown', true).focus()
|
|
215
294
|
}
|
|
@@ -258,7 +337,7 @@ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>
|
|
|
258
337
|
[`${direction}`]:
|
|
259
338
|
direction && direction !== 'center' && direction !== 'dropup-center',
|
|
260
339
|
},
|
|
261
|
-
className
|
|
340
|
+
className
|
|
262
341
|
)}
|
|
263
342
|
{...rest}
|
|
264
343
|
ref={forkedRef}
|
|
@@ -268,7 +347,7 @@ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>
|
|
|
268
347
|
)}
|
|
269
348
|
</CDropdownContext.Provider>
|
|
270
349
|
)
|
|
271
|
-
}
|
|
350
|
+
}
|
|
272
351
|
)
|
|
273
352
|
|
|
274
353
|
const alignmentDirection = PropTypes.oneOf<Directions>(['start', 'end'])
|
|
@@ -297,6 +376,7 @@ CDropdown.propTypes = {
|
|
|
297
376
|
onShow: PropTypes.func,
|
|
298
377
|
placement: placementPropType,
|
|
299
378
|
popper: PropTypes.bool,
|
|
379
|
+
popperConfig: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
|
|
300
380
|
portal: PropTypes.bool,
|
|
301
381
|
variant: PropTypes.oneOf(['btn-group', 'dropdown', 'input-group', 'nav-item']),
|
|
302
382
|
visible: PropTypes.bool,
|
|
@@ -42,7 +42,6 @@ export const CDropdownMenu: PolymorphicRefForwardingComponent<'ul', CDropdownMen
|
|
|
42
42
|
)}
|
|
43
43
|
ref={forkedRef}
|
|
44
44
|
role="menu"
|
|
45
|
-
aria-hidden={!visible}
|
|
46
45
|
{...(!popper && { 'data-coreui-popper': 'static' })}
|
|
47
46
|
{...(dark && { 'data-coreui-theme': 'dark' })}
|
|
48
47
|
{...rest}
|
package/src/components/index.ts
CHANGED
|
@@ -188,6 +188,12 @@ export interface CMultiSelectProps
|
|
|
188
188
|
* Size the component small or large.
|
|
189
189
|
*/
|
|
190
190
|
size?: 'sm' | 'lg'
|
|
191
|
+
/**
|
|
192
|
+
* Sets the initially selected values for the multi-select component.
|
|
193
|
+
*
|
|
194
|
+
* @since 5.13.0
|
|
195
|
+
*/
|
|
196
|
+
value?: string | number | (string | number)[]
|
|
191
197
|
/**
|
|
192
198
|
* Enable virtual scroller for the options list.
|
|
193
199
|
*
|
|
@@ -248,12 +254,13 @@ export const CMultiSelect = forwardRef<HTMLDivElement, CMultiSelectProps>(
|
|
|
248
254
|
text,
|
|
249
255
|
tooltipFeedback,
|
|
250
256
|
valid,
|
|
257
|
+
value,
|
|
251
258
|
virtualScroller,
|
|
252
259
|
visible = false,
|
|
253
260
|
visibleItems = 10,
|
|
254
261
|
...rest
|
|
255
262
|
},
|
|
256
|
-
ref
|
|
263
|
+
ref
|
|
257
264
|
) => {
|
|
258
265
|
const {
|
|
259
266
|
dropdownMenuElement,
|
|
@@ -278,18 +285,38 @@ export const CMultiSelect = forwardRef<HTMLDivElement, CMultiSelectProps>(
|
|
|
278
285
|
isExternalSearch(search)
|
|
279
286
|
? [...options, ...filterOptionsList(searchValue, userOptions)]
|
|
280
287
|
: filterOptionsList(searchValue, [...options, ...userOptions]),
|
|
281
|
-
true
|
|
288
|
+
true
|
|
282
289
|
),
|
|
283
|
-
[options, searchValue, userOptions]
|
|
290
|
+
[options, searchValue, userOptions]
|
|
284
291
|
)
|
|
285
292
|
|
|
286
|
-
const flattenedOptions = useMemo(
|
|
293
|
+
const flattenedOptions = useMemo(
|
|
294
|
+
() =>
|
|
295
|
+
flattenOptionsArray(options).map((option) => {
|
|
296
|
+
if (value && Array.isArray(value)) {
|
|
297
|
+
return {
|
|
298
|
+
...option,
|
|
299
|
+
selected: value.includes(option.value),
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
if (value === option.value) {
|
|
304
|
+
return {
|
|
305
|
+
...option,
|
|
306
|
+
selected: true,
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
return option
|
|
311
|
+
}),
|
|
312
|
+
[options, value]
|
|
313
|
+
)
|
|
287
314
|
|
|
288
315
|
const userOption = useMemo(() => {
|
|
289
316
|
if (
|
|
290
317
|
allowCreateOptions &&
|
|
291
318
|
filteredOptions.some(
|
|
292
|
-
(option) => option.label && option.label.toLowerCase() === searchValue.toLowerCase()
|
|
319
|
+
(option) => option.label && option.label.toLowerCase() === searchValue.toLowerCase()
|
|
293
320
|
)
|
|
294
321
|
) {
|
|
295
322
|
return false
|
|
@@ -305,7 +332,7 @@ export const CMultiSelect = forwardRef<HTMLDivElement, CMultiSelectProps>(
|
|
|
305
332
|
|
|
306
333
|
const _selected = flattenedOptions.filter((option: Option) => option.selected === true)
|
|
307
334
|
const deselected = flattenedOptions.filter(
|
|
308
|
-
(option: Option) => option.selected === false
|
|
335
|
+
(option: Option) => option.selected === false
|
|
309
336
|
) as Option[]
|
|
310
337
|
|
|
311
338
|
if (_selected.length > 0) {
|
|
@@ -314,7 +341,9 @@ export const CMultiSelect = forwardRef<HTMLDivElement, CMultiSelectProps>(
|
|
|
314
341
|
}, [flattenedOptions])
|
|
315
342
|
|
|
316
343
|
useEffect(() => {
|
|
317
|
-
!isInitialMount.current && onFilterChange
|
|
344
|
+
if (!isInitialMount.current && onFilterChange) {
|
|
345
|
+
onFilterChange(searchValue)
|
|
346
|
+
}
|
|
318
347
|
}, [searchValue])
|
|
319
348
|
|
|
320
349
|
useEffect(() => {
|
|
@@ -378,7 +407,7 @@ export const CMultiSelect = forwardRef<HTMLDivElement, CMultiSelectProps>(
|
|
|
378
407
|
items,
|
|
379
408
|
target,
|
|
380
409
|
event.key === 'ArrowDown',
|
|
381
|
-
!items.includes(target)
|
|
410
|
+
!items.includes(target)
|
|
382
411
|
).focus()
|
|
383
412
|
return
|
|
384
413
|
}
|
|
@@ -395,7 +424,7 @@ export const CMultiSelect = forwardRef<HTMLDivElement, CMultiSelectProps>(
|
|
|
395
424
|
setSelected([
|
|
396
425
|
...selected,
|
|
397
426
|
filteredOptions.find(
|
|
398
|
-
(option) => String(option.label).toLowerCase() === searchValue.toLowerCase()
|
|
427
|
+
(option) => String(option.label).toLowerCase() === searchValue.toLowerCase()
|
|
399
428
|
) as Option,
|
|
400
429
|
])
|
|
401
430
|
}
|
|
@@ -437,7 +466,7 @@ export const CMultiSelect = forwardRef<HTMLDivElement, CMultiSelectProps>(
|
|
|
437
466
|
items,
|
|
438
467
|
target,
|
|
439
468
|
event.key === 'ArrowDown',
|
|
440
|
-
!items.includes(target)
|
|
469
|
+
!items.includes(target)
|
|
441
470
|
).focus()
|
|
442
471
|
}
|
|
443
472
|
}
|
|
@@ -488,8 +517,8 @@ export const CMultiSelect = forwardRef<HTMLDivElement, CMultiSelectProps>(
|
|
|
488
517
|
selectOptions(
|
|
489
518
|
multiple,
|
|
490
519
|
[...flattenedOptions.filter((option: Option) => !option.disabled), ...userOptions],
|
|
491
|
-
selected
|
|
492
|
-
)
|
|
520
|
+
selected
|
|
521
|
+
)
|
|
493
522
|
)
|
|
494
523
|
}
|
|
495
524
|
|
|
@@ -534,7 +563,7 @@ export const CMultiSelect = forwardRef<HTMLDivElement, CMultiSelectProps>(
|
|
|
534
563
|
'is-valid': valid,
|
|
535
564
|
show: isOpen,
|
|
536
565
|
},
|
|
537
|
-
className
|
|
566
|
+
className
|
|
538
567
|
)}
|
|
539
568
|
onKeyDown={handleGlobalSearch}
|
|
540
569
|
aria-expanded={isOpen}
|
|
@@ -646,7 +675,7 @@ export const CMultiSelect = forwardRef<HTMLDivElement, CMultiSelectProps>(
|
|
|
646
675
|
</div>
|
|
647
676
|
</CFormControlWrapper>
|
|
648
677
|
)
|
|
649
|
-
}
|
|
678
|
+
}
|
|
650
679
|
)
|
|
651
680
|
|
|
652
681
|
CMultiSelect.propTypes = {
|
|
@@ -687,6 +716,12 @@ CMultiSelect.propTypes = {
|
|
|
687
716
|
selectionType: PropTypes.oneOf(['counter', 'tags', 'text']),
|
|
688
717
|
selectionTypeCounterText: PropTypes.string,
|
|
689
718
|
size: PropTypes.oneOf(['sm', 'lg']),
|
|
719
|
+
value: PropTypes.oneOfType([
|
|
720
|
+
PropTypes.number,
|
|
721
|
+
PropTypes.string,
|
|
722
|
+
PropTypes.arrayOf(PropTypes.number),
|
|
723
|
+
PropTypes.arrayOf(PropTypes.string),
|
|
724
|
+
]),
|
|
690
725
|
virtualScroller: PropTypes.bool,
|
|
691
726
|
visible: PropTypes.bool,
|
|
692
727
|
visibleItems: PropTypes.number,
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import React, {
|
|
2
|
+
ChangeEventHandler,
|
|
3
|
+
forwardRef,
|
|
4
|
+
InputHTMLAttributes,
|
|
5
|
+
useEffect,
|
|
6
|
+
useState,
|
|
7
|
+
} from 'react'
|
|
8
|
+
import PropTypes from 'prop-types'
|
|
9
|
+
import classNames from 'classnames'
|
|
10
|
+
|
|
11
|
+
import { CFormControlWrapper, CFormControlWrapperProps } from '../form/CFormControlWrapper'
|
|
12
|
+
|
|
13
|
+
export interface CPasswordInputProps
|
|
14
|
+
extends CFormControlWrapperProps,
|
|
15
|
+
Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {
|
|
16
|
+
/**
|
|
17
|
+
* Sets the accessible label (`aria-label`) for the toggle password visibility button. This improves accessibility for screen readers and should describe the action, e.g. `"Show password"` or `"Hide password"`.
|
|
18
|
+
*/
|
|
19
|
+
ariaLabelToggler?: string
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* A string of all className you want applied to the component.
|
|
23
|
+
*/
|
|
24
|
+
className?: string
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Enables delayed `onChange` execution for improved performance in React password inputs.
|
|
28
|
+
* - `true` delays the `onChange` callback by 500ms.
|
|
29
|
+
* - You can also pass a custom delay (in milliseconds) as a number.
|
|
30
|
+
*/
|
|
31
|
+
delay?: boolean | number
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Disables the password input field. When `true`, the user cannot interact with the field.
|
|
35
|
+
*/
|
|
36
|
+
disabled?: boolean
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Callback triggered when the value of the password input changes. If `delay` is set, the callback is called after the specified timeout.
|
|
40
|
+
*/
|
|
41
|
+
onChange?: ChangeEventHandler<HTMLInputElement>
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Makes the React password input read-only. Prevents user input but allows text selection.
|
|
45
|
+
*/
|
|
46
|
+
readOnly?: boolean
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Controls the initial visibility of the password. When `true`, the input type is set to `"text"` instead of `"password"`. This allows **toggling password visibility** in React forms.
|
|
50
|
+
*/
|
|
51
|
+
showPassword?: boolean
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Sets the visual size of the password input. Use `'sm'` for small or `'lg'` for large input fields.
|
|
55
|
+
*/
|
|
56
|
+
size?: 'sm' | 'lg'
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The value of the password input field. To make the input controlled, pair this with the `onChange` handler.
|
|
60
|
+
*/
|
|
61
|
+
value?: string | string[] | number
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export const CPasswordInput = forwardRef<HTMLInputElement, CPasswordInputProps>(
|
|
65
|
+
(
|
|
66
|
+
{
|
|
67
|
+
children,
|
|
68
|
+
ariaLabelToggler = 'Toggle password visibility',
|
|
69
|
+
className,
|
|
70
|
+
delay = false,
|
|
71
|
+
feedback,
|
|
72
|
+
feedbackInvalid,
|
|
73
|
+
feedbackValid,
|
|
74
|
+
floatingClassName,
|
|
75
|
+
floatingLabel,
|
|
76
|
+
id,
|
|
77
|
+
invalid,
|
|
78
|
+
label,
|
|
79
|
+
onChange,
|
|
80
|
+
showPassword: showPasswordProp = false,
|
|
81
|
+
size,
|
|
82
|
+
text,
|
|
83
|
+
tooltipFeedback,
|
|
84
|
+
valid,
|
|
85
|
+
...rest
|
|
86
|
+
},
|
|
87
|
+
ref
|
|
88
|
+
) => {
|
|
89
|
+
const [value, setValue] = useState<React.ChangeEvent<HTMLInputElement>>()
|
|
90
|
+
const [showPassword, setShowPassword] = useState<boolean>(showPasswordProp)
|
|
91
|
+
|
|
92
|
+
useEffect(() => {
|
|
93
|
+
const timeOutId = setTimeout(
|
|
94
|
+
() => value && onChange && onChange(value),
|
|
95
|
+
typeof delay === 'number' ? delay : 500
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
return () => clearTimeout(timeOutId)
|
|
99
|
+
}, [value])
|
|
100
|
+
|
|
101
|
+
useEffect(() => {
|
|
102
|
+
setShowPassword(showPasswordProp)
|
|
103
|
+
}, [showPasswordProp])
|
|
104
|
+
|
|
105
|
+
return (
|
|
106
|
+
<CFormControlWrapper
|
|
107
|
+
describedby={rest['aria-describedby']}
|
|
108
|
+
feedback={feedback}
|
|
109
|
+
feedbackInvalid={feedbackInvalid}
|
|
110
|
+
feedbackValid={feedbackValid}
|
|
111
|
+
floatingClassName={floatingClassName}
|
|
112
|
+
floatingLabel={floatingLabel}
|
|
113
|
+
id={id}
|
|
114
|
+
invalid={invalid}
|
|
115
|
+
label={label}
|
|
116
|
+
text={text}
|
|
117
|
+
tooltipFeedback={tooltipFeedback}
|
|
118
|
+
valid={valid}
|
|
119
|
+
>
|
|
120
|
+
<div className="form-password">
|
|
121
|
+
<input
|
|
122
|
+
className={classNames(
|
|
123
|
+
'form-control',
|
|
124
|
+
{
|
|
125
|
+
[`form-control-${size}`]: size,
|
|
126
|
+
'is-invalid': invalid,
|
|
127
|
+
'is-valid': valid,
|
|
128
|
+
},
|
|
129
|
+
className
|
|
130
|
+
)}
|
|
131
|
+
id={id}
|
|
132
|
+
type={showPassword ? 'text' : 'password'}
|
|
133
|
+
onChange={(event) => (delay ? setValue(event) : onChange && onChange(event))}
|
|
134
|
+
{...rest}
|
|
135
|
+
ref={ref}
|
|
136
|
+
>
|
|
137
|
+
{children}
|
|
138
|
+
</input>
|
|
139
|
+
<button
|
|
140
|
+
type="button"
|
|
141
|
+
className="form-password-action"
|
|
142
|
+
data-coreui-toggle="password"
|
|
143
|
+
aria-label={ariaLabelToggler}
|
|
144
|
+
onClick={() => setShowPassword((prev) => !prev)}
|
|
145
|
+
>
|
|
146
|
+
<span className="form-password-action-icon"></span>
|
|
147
|
+
</button>
|
|
148
|
+
</div>
|
|
149
|
+
</CFormControlWrapper>
|
|
150
|
+
)
|
|
151
|
+
}
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
CPasswordInput.propTypes = {
|
|
155
|
+
ariaLabelToggler: PropTypes.string,
|
|
156
|
+
className: PropTypes.string,
|
|
157
|
+
id: PropTypes.string,
|
|
158
|
+
delay: PropTypes.oneOfType([PropTypes.bool, PropTypes.number]),
|
|
159
|
+
showPassword: PropTypes.bool,
|
|
160
|
+
size: PropTypes.oneOf(['sm', 'lg']),
|
|
161
|
+
...CFormControlWrapper.propTypes,
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
CPasswordInput.displayName = 'CPasswordInput'
|