@coreui/vue-pro 5.1.0 → 5.3.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 +2 -1
- package/dist/cjs/components/alert/CAlert.d.ts +2 -2
- package/dist/cjs/components/avatar/CAvatar.d.ts +2 -10
- package/dist/cjs/components/badge/CBadge.d.ts +2 -2
- package/dist/cjs/components/breadcrumb/CBreadcrumbItem.js.map +1 -1
- package/dist/cjs/components/button/CButton.d.ts +2 -6
- package/dist/cjs/components/button/CButton.js +2 -1
- package/dist/cjs/components/button/CButton.js.map +1 -1
- package/dist/cjs/components/calendar/CCalendar.d.ts +10 -10
- package/dist/cjs/components/calendar/CCalendar.js +2 -2
- package/dist/cjs/components/calendar/CCalendar.js.map +1 -1
- package/dist/cjs/components/calendar/utils.d.ts +5 -4
- package/dist/cjs/components/calendar/utils.js +13 -6
- package/dist/cjs/components/calendar/utils.js.map +1 -1
- package/dist/cjs/components/carousel/CCarousel.d.ts +2 -2
- package/dist/cjs/components/carousel/CCarousel.js.map +1 -1
- package/dist/cjs/components/close-button/CCloseButton.js.map +1 -1
- package/dist/cjs/components/conditional-teleport/CConditionalTeleport.d.ts +2 -2
- package/dist/cjs/components/date-picker/CDatePicker.d.ts +16 -4
- package/dist/cjs/components/date-picker/CDatePicker.js +8 -2
- package/dist/cjs/components/date-picker/CDatePicker.js.map +1 -1
- package/dist/cjs/components/date-range-picker/CDateRangePicker.d.ts +45 -13
- package/dist/cjs/components/date-range-picker/CDateRangePicker.js +32 -9
- package/dist/cjs/components/date-range-picker/CDateRangePicker.js.map +1 -1
- package/dist/cjs/components/date-range-picker/utils.d.ts +1 -0
- package/dist/cjs/components/date-range-picker/utils.js +10 -0
- package/dist/cjs/components/date-range-picker/utils.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdown.d.ts +5 -28
- package/dist/cjs/components/dropdown/CDropdown.js +3 -1
- package/dist/cjs/components/dropdown/CDropdown.js.map +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/dropdown/utils.d.ts +0 -1
- package/dist/cjs/components/dropdown/utils.js +0 -13
- package/dist/cjs/components/dropdown/utils.js.map +1 -1
- package/dist/cjs/components/footer/CFooter.d.ts +17 -1
- package/dist/cjs/components/footer/CFooter.js +8 -1
- package/dist/cjs/components/footer/CFooter.js.map +1 -1
- package/dist/cjs/components/form/CFormCheck.js.map +1 -1
- package/dist/cjs/components/form/CFormControlValidation.js.map +1 -1
- package/dist/cjs/components/form/CFormControlWrapper.js.map +1 -1
- package/dist/cjs/components/form/CFormInput.d.ts +63 -63
- package/dist/cjs/components/form/CFormInput.js.map +1 -1
- package/dist/cjs/components/form/CFormSelect.d.ts +2 -2
- package/dist/cjs/components/form/CFormSelect.js.map +1 -1
- package/dist/cjs/components/form/CFormSwitch.js.map +1 -1
- package/dist/cjs/components/form/CFormTextarea.js.map +1 -1
- package/dist/cjs/components/index.js +8 -0
- package/dist/cjs/components/index.js.map +1 -1
- package/dist/cjs/components/link/CLink.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/multi-select/CMultiSelect.d.ts +33 -2
- package/dist/cjs/components/multi-select/CMultiSelect.js +25 -2
- package/dist/cjs/components/multi-select/CMultiSelect.js.map +1 -1
- package/dist/cjs/components/multi-select/CMultiSelectNativeSelect.d.ts +2 -0
- package/dist/cjs/components/multi-select/CMultiSelectNativeSelect.js +4 -2
- 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 +1 -0
- package/dist/cjs/components/multi-select/CMultiSelectSelection.js.map +1 -1
- package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
- package/dist/cjs/components/navbar/CNavbar.js.map +1 -1
- package/dist/cjs/components/offcanvas/COffcanvas.js.map +1 -1
- package/dist/cjs/components/pagination/CPaginationItem.js.map +1 -1
- package/dist/cjs/components/popover/CPopover.d.ts +4 -4
- package/dist/cjs/components/popover/CPopover.js +3 -2
- package/dist/cjs/components/popover/CPopover.js.map +1 -1
- package/dist/cjs/components/progress/CProgress.d.ts +2 -2
- package/dist/cjs/components/progress/CProgress.js.map +1 -1
- package/dist/cjs/components/progress/CProgressBar.d.ts +2 -2
- package/dist/cjs/components/progress/CProgressBar.js.map +1 -1
- package/dist/cjs/components/rating/CRating.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.d.ts +6 -6
- package/dist/cjs/components/smart-table/CSmartTable.js.map +1 -1
- package/dist/cjs/components/smart-table/CSmartTableBody.d.ts +2 -2
- package/dist/cjs/components/smart-table/CSmartTableBody.js.map +1 -1
- package/dist/cjs/components/smart-table/CSmartTableHead.d.ts +4 -4
- package/dist/cjs/components/smart-table/CSmartTableHead.js.map +1 -1
- package/dist/cjs/components/smart-table/utils.d.ts +4 -4
- package/dist/cjs/components/smart-table/utils.js.map +1 -1
- package/dist/cjs/components/spinner/CSpinner.d.ts +2 -2
- package/dist/cjs/components/table/CTable.d.ts +4 -4
- package/dist/cjs/components/table/CTable.js.map +1 -1
- package/dist/cjs/components/table/CTableDataCell.js.map +1 -1
- package/dist/cjs/components/tabs/CTab.d.ts +20 -0
- package/dist/cjs/components/tabs/CTab.js +41 -0
- package/dist/cjs/components/tabs/CTab.js.map +1 -0
- package/dist/cjs/components/tabs/CTabList.d.ts +42 -0
- package/dist/cjs/components/tabs/CTabList.js +74 -0
- package/dist/cjs/components/tabs/CTabList.js.map +1 -0
- package/dist/cjs/components/tabs/CTabPane.d.ts +19 -0
- package/dist/cjs/components/tabs/CTabPane.js +10 -1
- package/dist/cjs/components/tabs/CTabPane.js.map +1 -1
- package/dist/cjs/components/tabs/CTabPanel.d.ts +55 -0
- package/dist/cjs/components/tabs/CTabPanel.js +93 -0
- package/dist/cjs/components/tabs/CTabPanel.js.map +1 -0
- package/dist/cjs/components/tabs/CTabs.d.ts +22 -0
- package/dist/cjs/components/tabs/CTabs.js +43 -0
- package/dist/cjs/components/tabs/CTabs.js.map +1 -0
- package/dist/cjs/components/tabs/index.d.ts +5 -1
- package/dist/cjs/components/tabs/index.js +12 -0
- package/dist/cjs/components/tabs/index.js.map +1 -1
- package/dist/cjs/components/time-picker/CTimePicker.js +8 -0
- package/dist/cjs/components/time-picker/CTimePicker.js.map +1 -1
- package/dist/cjs/components/time-picker/utils.d.ts +4 -4
- package/dist/cjs/components/tooltip/CTooltip.d.ts +4 -4
- package/dist/cjs/components/tooltip/CTooltip.js +3 -2
- package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
- package/dist/cjs/components/virtual-scroller/CVirtualScroller.js.map +1 -1
- package/dist/cjs/components/widgets/CWidgetStatsB.js.map +1 -1
- package/dist/cjs/components/widgets/CWidgetStatsC.d.ts +0 -10
- package/dist/cjs/components/widgets/CWidgetStatsC.js.map +1 -1
- package/dist/cjs/composables/index.d.ts +2 -1
- package/dist/cjs/composables/useUniqueId.d.ts +3 -0
- package/dist/cjs/composables/useUniqueId.js +20 -0
- package/dist/cjs/composables/useUniqueId.js.map +1 -0
- package/dist/cjs/directives/v-c-popover.js +4 -2
- package/dist/cjs/directives/v-c-popover.js.map +1 -1
- package/dist/cjs/directives/v-c-tooltip.js +4 -2
- package/dist/cjs/directives/v-c-tooltip.js.map +1 -1
- package/dist/cjs/index.js +10 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/node_modules/@coreui/icons-vue/dist/index.es.js +66 -0
- package/dist/cjs/node_modules/@coreui/icons-vue/dist/index.es.js.map +1 -1
- package/dist/cjs/node_modules/vue-types/dist/vue-types.modern.js +1 -1
- package/dist/cjs/node_modules/vue-types/dist/vue-types.modern.js.map +1 -1
- package/dist/cjs/utils/getNextActiveElement.d.ts +2 -0
- package/dist/cjs/utils/getNextActiveElement.js +19 -0
- package/dist/cjs/utils/getNextActiveElement.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +2 -1
- package/dist/esm/components/alert/CAlert.d.ts +2 -2
- package/dist/esm/components/avatar/CAvatar.d.ts +2 -10
- package/dist/esm/components/badge/CBadge.d.ts +2 -2
- package/dist/esm/components/breadcrumb/CBreadcrumbItem.js.map +1 -1
- package/dist/esm/components/button/CButton.d.ts +2 -6
- package/dist/esm/components/button/CButton.js +2 -1
- package/dist/esm/components/button/CButton.js.map +1 -1
- package/dist/esm/components/calendar/CCalendar.d.ts +10 -10
- package/dist/esm/components/calendar/CCalendar.js +2 -2
- package/dist/esm/components/calendar/CCalendar.js.map +1 -1
- package/dist/esm/components/calendar/utils.d.ts +5 -4
- package/dist/esm/components/calendar/utils.js +13 -7
- package/dist/esm/components/calendar/utils.js.map +1 -1
- package/dist/esm/components/carousel/CCarousel.d.ts +2 -2
- package/dist/esm/components/carousel/CCarousel.js.map +1 -1
- package/dist/esm/components/close-button/CCloseButton.js.map +1 -1
- package/dist/esm/components/conditional-teleport/CConditionalTeleport.d.ts +2 -2
- package/dist/esm/components/date-picker/CDatePicker.d.ts +16 -4
- package/dist/esm/components/date-picker/CDatePicker.js +8 -2
- package/dist/esm/components/date-picker/CDatePicker.js.map +1 -1
- package/dist/esm/components/date-range-picker/CDateRangePicker.d.ts +45 -13
- package/dist/esm/components/date-range-picker/CDateRangePicker.js +33 -10
- package/dist/esm/components/date-range-picker/CDateRangePicker.js.map +1 -1
- package/dist/esm/components/date-range-picker/utils.d.ts +1 -0
- package/dist/esm/components/date-range-picker/utils.js +10 -1
- package/dist/esm/components/date-range-picker/utils.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdown.d.ts +5 -28
- package/dist/esm/components/dropdown/CDropdown.js +3 -1
- package/dist/esm/components/dropdown/CDropdown.js.map +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/dropdown/utils.d.ts +0 -1
- package/dist/esm/components/dropdown/utils.js +1 -13
- package/dist/esm/components/dropdown/utils.js.map +1 -1
- package/dist/esm/components/footer/CFooter.d.ts +17 -1
- package/dist/esm/components/footer/CFooter.js +8 -1
- package/dist/esm/components/footer/CFooter.js.map +1 -1
- package/dist/esm/components/form/CFormCheck.js.map +1 -1
- package/dist/esm/components/form/CFormControlValidation.js.map +1 -1
- package/dist/esm/components/form/CFormControlWrapper.js.map +1 -1
- package/dist/esm/components/form/CFormInput.d.ts +63 -63
- package/dist/esm/components/form/CFormInput.js.map +1 -1
- package/dist/esm/components/form/CFormSelect.d.ts +2 -2
- package/dist/esm/components/form/CFormSelect.js.map +1 -1
- package/dist/esm/components/form/CFormSwitch.js.map +1 -1
- package/dist/esm/components/form/CFormTextarea.js.map +1 -1
- package/dist/esm/components/index.js +4 -0
- package/dist/esm/components/index.js.map +1 -1
- package/dist/esm/components/link/CLink.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/multi-select/CMultiSelect.d.ts +33 -2
- package/dist/esm/components/multi-select/CMultiSelect.js +25 -2
- package/dist/esm/components/multi-select/CMultiSelect.js.map +1 -1
- package/dist/esm/components/multi-select/CMultiSelectNativeSelect.d.ts +2 -0
- package/dist/esm/components/multi-select/CMultiSelectNativeSelect.js +4 -2
- 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 +1 -0
- package/dist/esm/components/multi-select/CMultiSelectSelection.js.map +1 -1
- package/dist/esm/components/nav/CNavGroup.js.map +1 -1
- package/dist/esm/components/navbar/CNavbar.js.map +1 -1
- package/dist/esm/components/offcanvas/COffcanvas.js.map +1 -1
- package/dist/esm/components/pagination/CPaginationItem.js.map +1 -1
- package/dist/esm/components/popover/CPopover.d.ts +4 -4
- package/dist/esm/components/popover/CPopover.js +3 -2
- package/dist/esm/components/popover/CPopover.js.map +1 -1
- package/dist/esm/components/progress/CProgress.d.ts +2 -2
- package/dist/esm/components/progress/CProgress.js.map +1 -1
- package/dist/esm/components/progress/CProgressBar.d.ts +2 -2
- package/dist/esm/components/progress/CProgressBar.js.map +1 -1
- package/dist/esm/components/rating/CRating.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.d.ts +6 -6
- package/dist/esm/components/smart-table/CSmartTable.js.map +1 -1
- package/dist/esm/components/smart-table/CSmartTableBody.d.ts +2 -2
- package/dist/esm/components/smart-table/CSmartTableBody.js.map +1 -1
- package/dist/esm/components/smart-table/CSmartTableHead.d.ts +4 -4
- package/dist/esm/components/smart-table/CSmartTableHead.js.map +1 -1
- package/dist/esm/components/smart-table/utils.d.ts +4 -4
- package/dist/esm/components/smart-table/utils.js.map +1 -1
- package/dist/esm/components/spinner/CSpinner.d.ts +2 -2
- package/dist/esm/components/table/CTable.d.ts +4 -4
- package/dist/esm/components/table/CTable.js.map +1 -1
- package/dist/esm/components/table/CTableDataCell.js.map +1 -1
- package/dist/esm/components/tabs/CTab.d.ts +20 -0
- package/dist/esm/components/tabs/CTab.js +39 -0
- package/dist/esm/components/tabs/CTab.js.map +1 -0
- package/dist/esm/components/tabs/CTabList.d.ts +42 -0
- package/dist/esm/components/tabs/CTabList.js +72 -0
- package/dist/esm/components/tabs/CTabList.js.map +1 -0
- package/dist/esm/components/tabs/CTabPane.d.ts +19 -0
- package/dist/esm/components/tabs/CTabPane.js +10 -1
- package/dist/esm/components/tabs/CTabPane.js.map +1 -1
- package/dist/esm/components/tabs/CTabPanel.d.ts +55 -0
- package/dist/esm/components/tabs/CTabPanel.js +91 -0
- package/dist/esm/components/tabs/CTabPanel.js.map +1 -0
- package/dist/esm/components/tabs/CTabs.d.ts +22 -0
- package/dist/esm/components/tabs/CTabs.js +41 -0
- package/dist/esm/components/tabs/CTabs.js.map +1 -0
- package/dist/esm/components/tabs/index.d.ts +5 -1
- package/dist/esm/components/tabs/index.js +9 -1
- package/dist/esm/components/tabs/index.js.map +1 -1
- package/dist/esm/components/time-picker/CTimePicker.js +8 -0
- package/dist/esm/components/time-picker/CTimePicker.js.map +1 -1
- package/dist/esm/components/time-picker/utils.d.ts +4 -4
- package/dist/esm/components/tooltip/CTooltip.d.ts +4 -4
- package/dist/esm/components/tooltip/CTooltip.js +3 -2
- package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
- package/dist/esm/components/virtual-scroller/CVirtualScroller.js.map +1 -1
- package/dist/esm/components/widgets/CWidgetStatsB.js.map +1 -1
- package/dist/esm/components/widgets/CWidgetStatsC.d.ts +0 -10
- package/dist/esm/components/widgets/CWidgetStatsC.js.map +1 -1
- package/dist/esm/composables/index.d.ts +2 -1
- package/dist/esm/composables/useUniqueId.d.ts +3 -0
- package/dist/esm/composables/useUniqueId.js +18 -0
- package/dist/esm/composables/useUniqueId.js.map +1 -0
- package/dist/esm/directives/v-c-popover.js +4 -2
- package/dist/esm/directives/v-c-popover.js.map +1 -1
- package/dist/esm/directives/v-c-tooltip.js +4 -2
- package/dist/esm/directives/v-c-tooltip.js.map +1 -1
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/node_modules/@coreui/icons-vue/dist/index.es.js +67 -1
- package/dist/esm/node_modules/@coreui/icons-vue/dist/index.es.js.map +1 -1
- package/dist/esm/node_modules/vue-types/dist/vue-types.modern.js +1 -1
- package/dist/esm/node_modules/vue-types/dist/vue-types.modern.js.map +1 -1
- package/dist/esm/utils/getNextActiveElement.d.ts +2 -0
- package/dist/esm/utils/getNextActiveElement.js +15 -0
- package/dist/esm/utils/getNextActiveElement.js.map +1 -0
- package/dist/esm/utils/index.d.ts +2 -1
- package/package.json +8 -8
- package/src/components/button/CButton.ts +2 -1
- package/src/components/calendar/CCalendar.ts +2 -2
- package/src/components/calendar/utils.ts +23 -7
- package/src/components/date-picker/CDatePicker.ts +8 -2
- package/src/components/date-range-picker/CDateRangePicker.ts +40 -16
- package/src/components/date-range-picker/utils.ts +16 -0
- package/src/components/dropdown/CDropdown.ts +3 -2
- package/src/components/dropdown/utils.ts +0 -22
- package/src/components/footer/CFooter.ts +8 -1
- package/src/components/footer/__tests__/CFooter.spec.ts +19 -0
- package/src/components/multi-select/CMultiSelect.ts +31 -3
- package/src/components/multi-select/CMultiSelectNativeSelect.ts +4 -2
- package/src/components/multi-select/CMultiSelectSelection.ts +1 -0
- package/src/components/popover/CPopover.ts +4 -3
- package/src/components/tabs/CTab.ts +45 -0
- package/src/components/tabs/CTabList.ts +89 -0
- package/src/components/tabs/CTabPane.ts +10 -1
- package/src/components/tabs/CTabPanel.ts +129 -0
- package/src/components/tabs/CTabs.ts +45 -0
- package/src/components/tabs/index.ts +9 -1
- package/src/components/time-picker/CTimePicker.ts +8 -0
- package/src/components/tooltip/CTooltip.ts +4 -3
- package/src/composables/index.ts +2 -1
- package/src/composables/useUniqueId.ts +18 -0
- package/src/directives/v-c-popover.ts +3 -3
- package/src/directives/v-c-tooltip.ts +3 -3
- package/src/utils/getNextActiveElement.ts +23 -0
- package/src/utils/index.ts +2 -1
- package/dist/cjs/utils/getUID.js +0 -13
- package/dist/cjs/utils/getUID.js.map +0 -1
- package/dist/esm/utils/getUID.js +0 -9
- package/dist/esm/utils/getUID.js.map +0 -1
|
@@ -19,28 +19,6 @@ export const getAlignmentClassNames = (alignment: Alignments) => {
|
|
|
19
19
|
return classNames
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export const getNextActiveElement = (
|
|
23
|
-
list: HTMLElement[],
|
|
24
|
-
activeElement: HTMLElement,
|
|
25
|
-
shouldGetNext: boolean,
|
|
26
|
-
isCycleAllowed: boolean,
|
|
27
|
-
) => {
|
|
28
|
-
const listLength = list.length
|
|
29
|
-
let index = list.indexOf(activeElement)
|
|
30
|
-
|
|
31
|
-
if (index === -1) {
|
|
32
|
-
return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
index += shouldGetNext ? 1 : -1
|
|
36
|
-
|
|
37
|
-
if (isCycleAllowed) {
|
|
38
|
-
index = (index + listLength) % listLength
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return list[Math.max(0, Math.min(index, listLength - 1))]
|
|
42
|
-
}
|
|
43
|
-
|
|
44
22
|
export const getPlacement = (
|
|
45
23
|
placement: Placement,
|
|
46
24
|
direction: string | undefined,
|
|
@@ -3,6 +3,13 @@ import { defineComponent, h } from 'vue'
|
|
|
3
3
|
const CFooter = defineComponent({
|
|
4
4
|
name: 'CFooter',
|
|
5
5
|
props: {
|
|
6
|
+
/**
|
|
7
|
+
* Component used for the root node. Either a string to use a HTML element or a component.
|
|
8
|
+
*/
|
|
9
|
+
as: {
|
|
10
|
+
type: String,
|
|
11
|
+
default: 'div',
|
|
12
|
+
},
|
|
6
13
|
/**
|
|
7
14
|
* Place footer in non-static positions.
|
|
8
15
|
*
|
|
@@ -18,7 +25,7 @@ const CFooter = defineComponent({
|
|
|
18
25
|
setup(props, { slots }) {
|
|
19
26
|
return () =>
|
|
20
27
|
h(
|
|
21
|
-
|
|
28
|
+
props.as,
|
|
22
29
|
{ class: ['footer', { [`footer-${props.position}`]: props.position }] },
|
|
23
30
|
slots.default && slots.default(),
|
|
24
31
|
)
|
|
@@ -19,6 +19,15 @@ const customWrapper = mount(Component, {
|
|
|
19
19
|
},
|
|
20
20
|
})
|
|
21
21
|
|
|
22
|
+
const customWrapperTwo = mount(Component, {
|
|
23
|
+
propsData: {
|
|
24
|
+
as: 'footer',
|
|
25
|
+
},
|
|
26
|
+
slots: {
|
|
27
|
+
default: 'Default slot',
|
|
28
|
+
},
|
|
29
|
+
})
|
|
30
|
+
|
|
22
31
|
describe(`Loads and display ${ComponentName} component`, () => {
|
|
23
32
|
it('has a name', () => {
|
|
24
33
|
expect(Component.name).toMatch(ComponentName)
|
|
@@ -42,3 +51,13 @@ describe(`Customize ${ComponentName} component`, () => {
|
|
|
42
51
|
expect(customWrapper.classes('footer-fixed')).toBe(true)
|
|
43
52
|
})
|
|
44
53
|
})
|
|
54
|
+
|
|
55
|
+
describe(`Customize (number two) ${ComponentName} component`, () => {
|
|
56
|
+
it('renders correctly', () => {
|
|
57
|
+
expect(customWrapperTwo.html()).toMatchSnapshot()
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
it('tag name is custom', () => {
|
|
61
|
+
expect(customWrapperTwo.element.tagName).toBe('FOOTER')
|
|
62
|
+
})
|
|
63
|
+
})
|
|
@@ -60,7 +60,10 @@ const CMultiSelect = defineComponent({
|
|
|
60
60
|
*/
|
|
61
61
|
feedbackValid: String,
|
|
62
62
|
/**
|
|
63
|
-
*
|
|
63
|
+
* Set the id attribute for the native select element.
|
|
64
|
+
*
|
|
65
|
+
* **[Deprecated since v5.3.0]** The name attribute for the native select element is generated based on the `id` property:
|
|
66
|
+
* - `<select name="\{id\}-multi-select" />`
|
|
64
67
|
*/
|
|
65
68
|
id: String,
|
|
66
69
|
/**
|
|
@@ -90,6 +93,12 @@ const CMultiSelect = defineComponent({
|
|
|
90
93
|
type: Boolean,
|
|
91
94
|
default: true,
|
|
92
95
|
},
|
|
96
|
+
/**
|
|
97
|
+
* The name attribute for the select element.
|
|
98
|
+
*
|
|
99
|
+
* @since 5.3.0
|
|
100
|
+
*/
|
|
101
|
+
name: String,
|
|
93
102
|
/**
|
|
94
103
|
* List of option elements.
|
|
95
104
|
*/
|
|
@@ -132,6 +141,12 @@ const CMultiSelect = defineComponent({
|
|
|
132
141
|
* When it is present, it indicates that the user must choose a value before submitting the form.
|
|
133
142
|
*/
|
|
134
143
|
required: Boolean,
|
|
144
|
+
/**
|
|
145
|
+
* Determines whether the selected options should be cleared when the options list is updated. When set to true, any previously selected options will be reset whenever the options list undergoes a change. This ensures that outdated selections are not retained when new options are provided.
|
|
146
|
+
*
|
|
147
|
+
* @since 5.3.0
|
|
148
|
+
*/
|
|
149
|
+
resetSelectionOnOptionsChange: Boolean,
|
|
135
150
|
/**
|
|
136
151
|
* Enables search input element.
|
|
137
152
|
*/
|
|
@@ -298,7 +313,8 @@ const CMultiSelect = defineComponent({
|
|
|
298
313
|
if (
|
|
299
314
|
props.allowCreateOptions &&
|
|
300
315
|
filteredOptions.value.some(
|
|
301
|
-
(option) =>
|
|
316
|
+
(option) =>
|
|
317
|
+
option.label && option.label.toLowerCase() === searchValue.value.toLowerCase(),
|
|
302
318
|
)
|
|
303
319
|
) {
|
|
304
320
|
return false
|
|
@@ -312,6 +328,12 @@ const CMultiSelect = defineComponent({
|
|
|
312
328
|
(newValue, oldValue) => {
|
|
313
329
|
if (JSON.stringify(newValue) !== JSON.stringify(oldValue)) {
|
|
314
330
|
options.value = newValue
|
|
331
|
+
|
|
332
|
+
if (props.resetSelectionOnOptionsChange) {
|
|
333
|
+
selected.value = []
|
|
334
|
+
return
|
|
335
|
+
}
|
|
336
|
+
|
|
315
337
|
const _selected = flattenedOptions.value.filter(
|
|
316
338
|
(option: Option | OptionsGroup) => option.selected === true,
|
|
317
339
|
)
|
|
@@ -355,6 +377,12 @@ const CMultiSelect = defineComponent({
|
|
|
355
377
|
|
|
356
378
|
emit('hide')
|
|
357
379
|
|
|
380
|
+
searchValue.value = ''
|
|
381
|
+
|
|
382
|
+
if (searchRef.value) {
|
|
383
|
+
searchRef.value.value = ''
|
|
384
|
+
}
|
|
385
|
+
|
|
358
386
|
window.removeEventListener('mouseup', handleMouseUp)
|
|
359
387
|
window.removeEventListener('keyup', handleKeyUp)
|
|
360
388
|
|
|
@@ -505,6 +533,7 @@ const CMultiSelect = defineComponent({
|
|
|
505
533
|
h(CMultiSelectNativeSelect, {
|
|
506
534
|
id: props.id,
|
|
507
535
|
multiple: props.multiple,
|
|
536
|
+
name: props.name,
|
|
508
537
|
options: selected.value,
|
|
509
538
|
required: props.required,
|
|
510
539
|
value: props.multiple
|
|
@@ -542,7 +571,6 @@ const CMultiSelect = defineComponent({
|
|
|
542
571
|
},
|
|
543
572
|
],
|
|
544
573
|
'aria-expanded': visible.value,
|
|
545
|
-
id: props.id,
|
|
546
574
|
ref: multiSelectRef,
|
|
547
575
|
},
|
|
548
576
|
{
|
|
@@ -10,6 +10,7 @@ const CMultiSelectNativeSelect = defineComponent({
|
|
|
10
10
|
type: Boolean,
|
|
11
11
|
default: true,
|
|
12
12
|
},
|
|
13
|
+
name: String,
|
|
13
14
|
options: {
|
|
14
15
|
type: Array as PropType<Option[]>,
|
|
15
16
|
default: () => [],
|
|
@@ -38,8 +39,9 @@ const CMultiSelectNativeSelect = defineComponent({
|
|
|
38
39
|
'select',
|
|
39
40
|
{
|
|
40
41
|
className: 'multi-select-new',
|
|
41
|
-
|
|
42
|
-
...(props.id && { name: `${props.id}-multi-select` }),
|
|
42
|
+
id: props.id,
|
|
43
|
+
...(props.id && !props.name && { name: `${props.id}-multi-select` }), // TODO: remove in v6
|
|
44
|
+
...(props.name && { name: props.name }), // TODO: change to `name: props.name` in v6
|
|
43
45
|
multiple: props.multiple,
|
|
44
46
|
tabIndex: '-1',
|
|
45
47
|
style: { display: 'none' },
|
|
@@ -2,10 +2,10 @@ import { defineComponent, h, onMounted, PropType, ref, RendererElement, Transiti
|
|
|
2
2
|
import type { Placement } from '@popperjs/core'
|
|
3
3
|
|
|
4
4
|
import { CConditionalTeleport } from '../conditional-teleport'
|
|
5
|
-
import { usePopper } from '../../composables'
|
|
5
|
+
import { useUniqueId, usePopper } from '../../composables'
|
|
6
6
|
import type { Placements, Triggers } from '../../types'
|
|
7
7
|
import { executeAfterTransition } from '../../utils/transition'
|
|
8
|
-
import { getRTLPlacement
|
|
8
|
+
import { getRTLPlacement } from '../../utils'
|
|
9
9
|
|
|
10
10
|
const CPopover = defineComponent({
|
|
11
11
|
name: 'CPopover',
|
|
@@ -119,6 +119,7 @@ const CPopover = defineComponent({
|
|
|
119
119
|
const popoverRef = ref()
|
|
120
120
|
const uID = ref()
|
|
121
121
|
const visible = ref(props.visible)
|
|
122
|
+
const { getUID } = useUniqueId('popover')
|
|
122
123
|
const { initPopper, destroyPopper } = usePopper()
|
|
123
124
|
|
|
124
125
|
const delay =
|
|
@@ -149,7 +150,7 @@ const CPopover = defineComponent({
|
|
|
149
150
|
}
|
|
150
151
|
|
|
151
152
|
onMounted(() => {
|
|
152
|
-
uID.value = getUID(
|
|
153
|
+
uID.value = getUID()
|
|
153
154
|
})
|
|
154
155
|
|
|
155
156
|
const handleEnter = (el: RendererElement, done: () => void) => {
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { defineComponent, h, inject, Ref } from 'vue'
|
|
2
|
+
|
|
3
|
+
const CTab = defineComponent({
|
|
4
|
+
name: 'CTab',
|
|
5
|
+
props: {
|
|
6
|
+
/**
|
|
7
|
+
* Item key.
|
|
8
|
+
*/
|
|
9
|
+
itemKey: {
|
|
10
|
+
type: [Number, String],
|
|
11
|
+
required: true,
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
setup(props, { slots }) {
|
|
15
|
+
const activeItemKey = inject('activeItemKey') as Ref<number | string>
|
|
16
|
+
const id = inject('id') as Ref<number | string>
|
|
17
|
+
const setActiveItemKey = inject('setActiveItemKey') as (key: number | string) => void
|
|
18
|
+
|
|
19
|
+
const isActive = () => props.itemKey === activeItemKey.value
|
|
20
|
+
|
|
21
|
+
return () =>
|
|
22
|
+
h(
|
|
23
|
+
'button',
|
|
24
|
+
{
|
|
25
|
+
class: [
|
|
26
|
+
'nav-link',
|
|
27
|
+
{
|
|
28
|
+
active: isActive(),
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
id: `${props.itemKey}-tab-${id.value}`,
|
|
32
|
+
role: 'tab',
|
|
33
|
+
tabindex: isActive() ? 0 : -1,
|
|
34
|
+
type: 'button',
|
|
35
|
+
'aria-controls': `${props.itemKey}-tab-panel-${id.value}`,
|
|
36
|
+
'aria-selected': isActive(),
|
|
37
|
+
onClick: () => setActiveItemKey(props.itemKey),
|
|
38
|
+
onFocus: () => setActiveItemKey(props.itemKey),
|
|
39
|
+
},
|
|
40
|
+
slots.default && slots.default(),
|
|
41
|
+
)
|
|
42
|
+
},
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
export { CTab }
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { defineComponent, h, ref } from 'vue'
|
|
2
|
+
import { getNextActiveElement } from '../../utils'
|
|
3
|
+
|
|
4
|
+
const CTabList = defineComponent({
|
|
5
|
+
name: 'CTabList',
|
|
6
|
+
props: {
|
|
7
|
+
/**
|
|
8
|
+
* Specify a layout type for component.
|
|
9
|
+
*
|
|
10
|
+
* @values 'fill', 'justified'
|
|
11
|
+
*/
|
|
12
|
+
layout: {
|
|
13
|
+
type: String,
|
|
14
|
+
validator: (value: string) => {
|
|
15
|
+
return ['fill', 'justified'].includes(value)
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
/**
|
|
19
|
+
* Set the nav variant to tabs or pills.
|
|
20
|
+
*
|
|
21
|
+
* @values 'pills', 'tabs', 'underline', 'underline-border'
|
|
22
|
+
*/
|
|
23
|
+
variant: {
|
|
24
|
+
type: String,
|
|
25
|
+
validator: (value: string) => {
|
|
26
|
+
return ['pills', 'tabs', 'underline', 'underline-border'].includes(value)
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
setup(props, { slots }) {
|
|
31
|
+
const tabListRef = ref<HTMLDivElement>()
|
|
32
|
+
|
|
33
|
+
const handleKeydown = (event: KeyboardEvent) => {
|
|
34
|
+
if (
|
|
35
|
+
tabListRef.value &&
|
|
36
|
+
(event.key === 'ArrowDown' ||
|
|
37
|
+
event.key === 'ArrowUp' ||
|
|
38
|
+
event.key === 'ArrowLeft' ||
|
|
39
|
+
event.key === 'ArrowRight' ||
|
|
40
|
+
event.key === 'Home' ||
|
|
41
|
+
event.key === 'End')
|
|
42
|
+
) {
|
|
43
|
+
event.preventDefault()
|
|
44
|
+
const target = event.target as HTMLElement
|
|
45
|
+
// eslint-disable-next-line unicorn/prefer-spread
|
|
46
|
+
const items: HTMLElement[] = Array.from(
|
|
47
|
+
tabListRef.value.querySelectorAll('.nav-link:not(.disabled):not(:disabled)'),
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
let nextActiveElement
|
|
51
|
+
|
|
52
|
+
if (event.key === 'Home' || event.key === 'End') {
|
|
53
|
+
nextActiveElement = event.key === 'End' ? items.at(-1) : items[0]
|
|
54
|
+
} else {
|
|
55
|
+
nextActiveElement = getNextActiveElement(
|
|
56
|
+
items,
|
|
57
|
+
target,
|
|
58
|
+
event.key === 'ArrowDown' || event.key === 'ArrowRight',
|
|
59
|
+
true,
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (nextActiveElement) {
|
|
64
|
+
nextActiveElement.focus({ preventScroll: true })
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return () =>
|
|
70
|
+
h(
|
|
71
|
+
'div',
|
|
72
|
+
{
|
|
73
|
+
class: [
|
|
74
|
+
'nav',
|
|
75
|
+
{
|
|
76
|
+
[`nav-${props.layout}`]: props.layout,
|
|
77
|
+
[`nav-${props.variant}`]: props.variant,
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
role: 'tablist',
|
|
81
|
+
onKeydown: (event) => handleKeydown(event),
|
|
82
|
+
ref: tabListRef,
|
|
83
|
+
},
|
|
84
|
+
slots.default && slots.default(),
|
|
85
|
+
)
|
|
86
|
+
},
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
export { CTabList }
|
|
@@ -5,6 +5,15 @@ import { executeAfterTransition } from '../../utils/transition'
|
|
|
5
5
|
const CTabPane = defineComponent({
|
|
6
6
|
name: 'CTabPane',
|
|
7
7
|
props: {
|
|
8
|
+
/**
|
|
9
|
+
* Enable fade in and fade out transition.
|
|
10
|
+
*
|
|
11
|
+
* @since 5.1.0
|
|
12
|
+
*/
|
|
13
|
+
transition: {
|
|
14
|
+
type: Boolean,
|
|
15
|
+
default: true,
|
|
16
|
+
},
|
|
8
17
|
/**
|
|
9
18
|
* Toggle the visibility of component.
|
|
10
19
|
*/
|
|
@@ -57,9 +66,9 @@ const CTabPane = defineComponent({
|
|
|
57
66
|
{
|
|
58
67
|
class: [
|
|
59
68
|
'tab-pane',
|
|
60
|
-
'fade',
|
|
61
69
|
{
|
|
62
70
|
active: props.visible,
|
|
71
|
+
fade: props.transition,
|
|
63
72
|
show: firstRender.value && props.visible,
|
|
64
73
|
},
|
|
65
74
|
],
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defineComponent,
|
|
3
|
+
h,
|
|
4
|
+
inject,
|
|
5
|
+
ref,
|
|
6
|
+
Ref,
|
|
7
|
+
RendererElement,
|
|
8
|
+
Transition,
|
|
9
|
+
vShow,
|
|
10
|
+
watch,
|
|
11
|
+
withDirectives,
|
|
12
|
+
} from 'vue'
|
|
13
|
+
|
|
14
|
+
import { executeAfterTransition } from '../../utils/transition'
|
|
15
|
+
|
|
16
|
+
const CTabPanel = defineComponent({
|
|
17
|
+
name: 'CTabPanel',
|
|
18
|
+
props: {
|
|
19
|
+
/**
|
|
20
|
+
* Item key.
|
|
21
|
+
*/
|
|
22
|
+
itemKey: {
|
|
23
|
+
type: [Number, String],
|
|
24
|
+
required: true,
|
|
25
|
+
},
|
|
26
|
+
/**
|
|
27
|
+
* Enable fade in and fade out transition.
|
|
28
|
+
*/
|
|
29
|
+
transition: {
|
|
30
|
+
type: Boolean,
|
|
31
|
+
default: true,
|
|
32
|
+
},
|
|
33
|
+
/**
|
|
34
|
+
* Toggle the visibility of component.
|
|
35
|
+
*/
|
|
36
|
+
visible: {
|
|
37
|
+
type: Boolean,
|
|
38
|
+
default: false,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
emits: [
|
|
42
|
+
/**
|
|
43
|
+
* Callback fired when the component requests to be hidden.
|
|
44
|
+
*/
|
|
45
|
+
'hide',
|
|
46
|
+
/**
|
|
47
|
+
* Callback fired when the component requests to be shown.
|
|
48
|
+
*/
|
|
49
|
+
'show',
|
|
50
|
+
],
|
|
51
|
+
setup(props, { slots, emit }) {
|
|
52
|
+
const activeItemKey = inject('activeItemKey') as Ref<number | string>
|
|
53
|
+
const id = inject('id') as Ref<number | string>
|
|
54
|
+
|
|
55
|
+
const tabPaneRef = ref()
|
|
56
|
+
const firstRender = ref(true)
|
|
57
|
+
const visible = ref()
|
|
58
|
+
|
|
59
|
+
watch(
|
|
60
|
+
() => props.visible,
|
|
61
|
+
() => {
|
|
62
|
+
visible.value = props.visible
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
immediate: true,
|
|
66
|
+
},
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
watch(
|
|
70
|
+
activeItemKey,
|
|
71
|
+
() => {
|
|
72
|
+
visible.value = Boolean(activeItemKey.value === props.itemKey)
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
immediate: true,
|
|
76
|
+
},
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
const handleEnter = (el: RendererElement, done: () => void) => {
|
|
80
|
+
firstRender.value = false
|
|
81
|
+
emit('show')
|
|
82
|
+
setTimeout(() => {
|
|
83
|
+
executeAfterTransition(() => done(), el as HTMLElement)
|
|
84
|
+
el.classList.add('show')
|
|
85
|
+
}, 1)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const handleLeave = (el: RendererElement, done: () => void) => {
|
|
89
|
+
firstRender.value = false
|
|
90
|
+
emit('hide')
|
|
91
|
+
el.classList.remove('show')
|
|
92
|
+
executeAfterTransition(() => done(), el as HTMLElement)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return () =>
|
|
96
|
+
h(
|
|
97
|
+
Transition,
|
|
98
|
+
{
|
|
99
|
+
onEnter: (el, done) => handleEnter(el, done),
|
|
100
|
+
onLeave: (el, done) => handleLeave(el, done),
|
|
101
|
+
},
|
|
102
|
+
() =>
|
|
103
|
+
withDirectives(
|
|
104
|
+
h(
|
|
105
|
+
'div',
|
|
106
|
+
{
|
|
107
|
+
class: [
|
|
108
|
+
'tab-pane',
|
|
109
|
+
{
|
|
110
|
+
active: visible.value,
|
|
111
|
+
fade: props.transition,
|
|
112
|
+
show: firstRender.value && visible.value,
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
id: `${props.itemKey}-tab-panel-${id.value}`,
|
|
116
|
+
role: 'tabpanel',
|
|
117
|
+
'aria-labelledby': `${props.itemKey}-tab-${id.value}`,
|
|
118
|
+
tabindex: 0,
|
|
119
|
+
ref: tabPaneRef,
|
|
120
|
+
},
|
|
121
|
+
slots.default && slots.default(),
|
|
122
|
+
),
|
|
123
|
+
[[vShow, visible.value]],
|
|
124
|
+
),
|
|
125
|
+
)
|
|
126
|
+
},
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
export { CTabPanel }
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { defineComponent, h, provide, ref, watch } from 'vue'
|
|
2
|
+
import { useUniqueId } from '../../composables'
|
|
3
|
+
|
|
4
|
+
const CTabs = defineComponent({
|
|
5
|
+
name: 'CTabs',
|
|
6
|
+
props: {
|
|
7
|
+
/**
|
|
8
|
+
* The active item key.
|
|
9
|
+
*/
|
|
10
|
+
activeItemKey: {
|
|
11
|
+
type: [Number, String],
|
|
12
|
+
required: true,
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
emits: [
|
|
16
|
+
/**
|
|
17
|
+
* The callback is fired when the active tab changes.
|
|
18
|
+
*/
|
|
19
|
+
'change',
|
|
20
|
+
],
|
|
21
|
+
setup(props, { slots, emit }) {
|
|
22
|
+
const { getUID } = useUniqueId()
|
|
23
|
+
const uID = ref(getUID())
|
|
24
|
+
const activeItemKey = ref(props.activeItemKey)
|
|
25
|
+
const setActiveItemKey = (key: string | number) => {
|
|
26
|
+
activeItemKey.value = key
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
watch(
|
|
30
|
+
() => props.activeItemKey,
|
|
31
|
+
(value) => {
|
|
32
|
+
activeItemKey.value = value
|
|
33
|
+
emit('change', value)
|
|
34
|
+
},
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
provide('activeItemKey', activeItemKey)
|
|
38
|
+
provide('id', uID)
|
|
39
|
+
provide('setActiveItemKey', setActiveItemKey)
|
|
40
|
+
|
|
41
|
+
return () => h('div', { class: 'tabs' }, slots.default && slots.default())
|
|
42
|
+
},
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
export { CTabs }
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import { App } from 'vue'
|
|
2
|
+
import { CTab } from './CTab'
|
|
2
3
|
import { CTabContent } from './CTabContent'
|
|
4
|
+
import { CTabList } from './CTabList'
|
|
3
5
|
import { CTabPane } from './CTabPane'
|
|
6
|
+
import { CTabPanel } from './CTabPanel'
|
|
7
|
+
import { CTabs } from './CTabs'
|
|
4
8
|
|
|
5
9
|
const CTabsPlugin = {
|
|
6
10
|
install: (app: App): void => {
|
|
11
|
+
app.component(CTab.name as string, CTab)
|
|
7
12
|
app.component(CTabContent.name as string, CTabContent)
|
|
13
|
+
app.component(CTabList.name as string, CTabList)
|
|
8
14
|
app.component(CTabPane.name as string, CTabPane)
|
|
15
|
+
app.component(CTabPanel.name as string, CTabPanel)
|
|
16
|
+
app.component(CTabs.name as string, CTabs)
|
|
9
17
|
},
|
|
10
18
|
}
|
|
11
19
|
|
|
12
|
-
export { CTabsPlugin, CTabContent, CTabPane }
|
|
20
|
+
export { CTabsPlugin, CTab, CTabContent, CTabList, CTabPane, CTabPanel, CTabs }
|
|
@@ -213,6 +213,12 @@ const CTimePicker = defineComponent({
|
|
|
213
213
|
>,
|
|
214
214
|
default: true,
|
|
215
215
|
},
|
|
216
|
+
/**
|
|
217
|
+
* Set the name attribute for the input element.
|
|
218
|
+
*
|
|
219
|
+
* @since 5.3.0
|
|
220
|
+
*/
|
|
221
|
+
name: String,
|
|
216
222
|
/**
|
|
217
223
|
* Specifies a short hint that is visible in the input.
|
|
218
224
|
*/
|
|
@@ -436,6 +442,8 @@ const CTimePicker = defineComponent({
|
|
|
436
442
|
autocomplete: 'off',
|
|
437
443
|
class: 'time-picker-input',
|
|
438
444
|
disabled: props.disabled,
|
|
445
|
+
id: props.id,
|
|
446
|
+
name: props.name,
|
|
439
447
|
onInput: (event: Event) =>
|
|
440
448
|
useDebouncedCallback(() => {
|
|
441
449
|
if (isValidTime((event.target as HTMLInputElement).value)) {
|
|
@@ -2,10 +2,10 @@ import { defineComponent, h, onMounted, PropType, ref, RendererElement, Transiti
|
|
|
2
2
|
import type { Placement } from '@popperjs/core'
|
|
3
3
|
|
|
4
4
|
import { CConditionalTeleport } from '../conditional-teleport'
|
|
5
|
-
import { usePopper } from '../../composables'
|
|
5
|
+
import { useUniqueId, usePopper } from '../../composables'
|
|
6
6
|
import type { Placements, Triggers } from '../../types'
|
|
7
7
|
import { executeAfterTransition } from '../../utils/transition'
|
|
8
|
-
import { getRTLPlacement
|
|
8
|
+
import { getRTLPlacement } from '../../utils'
|
|
9
9
|
|
|
10
10
|
const CTooltip = defineComponent({
|
|
11
11
|
name: 'CTooltip',
|
|
@@ -115,6 +115,7 @@ const CTooltip = defineComponent({
|
|
|
115
115
|
const tooltipRef = ref()
|
|
116
116
|
const uID = ref()
|
|
117
117
|
const visible = ref(props.visible)
|
|
118
|
+
const { getUID } = useUniqueId('popover')
|
|
118
119
|
const { initPopper, destroyPopper } = usePopper()
|
|
119
120
|
|
|
120
121
|
const delay =
|
|
@@ -145,7 +146,7 @@ const CTooltip = defineComponent({
|
|
|
145
146
|
}
|
|
146
147
|
|
|
147
148
|
onMounted(() => {
|
|
148
|
-
uID.value = getUID(
|
|
149
|
+
uID.value = getUID()
|
|
149
150
|
})
|
|
150
151
|
|
|
151
152
|
const handleEnter = (el: RendererElement, done: () => void) => {
|
package/src/composables/index.ts
CHANGED
|
@@ -2,5 +2,6 @@ import { useColorModes } from './useColorModes'
|
|
|
2
2
|
import { useDebouncedCallback } from './useDebouncedCallback'
|
|
3
3
|
import { useIsVisible } from './useIsVisible'
|
|
4
4
|
import { usePopper } from './usePopper'
|
|
5
|
+
import { useUniqueId } from './useUniqueId'
|
|
5
6
|
|
|
6
|
-
export { useColorModes, useDebouncedCallback, useIsVisible, usePopper }
|
|
7
|
+
export { useColorModes, useDebouncedCallback, useIsVisible, usePopper, useUniqueId }
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ref } from 'vue'
|
|
2
|
+
|
|
3
|
+
export const useUniqueId = (prefix: string = '') => {
|
|
4
|
+
const ids = ref<string[]>([])
|
|
5
|
+
|
|
6
|
+
const getUID = () => {
|
|
7
|
+
do {
|
|
8
|
+
prefix += Math.floor(Math.random() * 1_000_000)
|
|
9
|
+
} while (ids.value.includes(prefix))
|
|
10
|
+
|
|
11
|
+
ids.value.push(prefix)
|
|
12
|
+
return prefix
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return {
|
|
16
|
+
getUID,
|
|
17
|
+
}
|
|
18
|
+
}
|