@coreui/vue-pro 5.15.0 → 5.17.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/autocomplete/CAutocomplete.js +17 -16
- package/dist/cjs/components/autocomplete/CAutocomplete.js.map +1 -1
- package/dist/cjs/components/calendar/CCalendar.js +6 -0
- package/dist/cjs/components/calendar/CCalendar.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdown.d.ts +32 -7
- package/dist/cjs/components/dropdown/CDropdown.js +47 -18
- package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownToggle.d.ts +19 -0
- package/dist/cjs/components/dropdown/CDropdownToggle.js +10 -1
- package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
- package/dist/cjs/components/dropdown/utils.d.ts +2 -0
- package/dist/cjs/components/dropdown/utils.js +13 -0
- package/dist/cjs/components/dropdown/utils.js.map +1 -1
- package/dist/cjs/components/index.d.ts +1 -0
- package/dist/cjs/components/index.js +4 -0
- package/dist/cjs/components/index.js.map +1 -1
- package/dist/cjs/components/nav/CNavItem.d.ts +2 -2
- package/dist/cjs/components/one-time-password-input/COneTimePassword.d.ts +278 -0
- package/dist/cjs/components/one-time-password-input/COneTimePassword.js +393 -0
- package/dist/cjs/components/one-time-password-input/COneTimePassword.js.map +1 -0
- package/dist/cjs/components/one-time-password-input/COneTimePasswordInput.d.ts +4 -0
- package/dist/cjs/components/one-time-password-input/COneTimePasswordInput.js +19 -0
- package/dist/cjs/components/one-time-password-input/COneTimePasswordInput.js.map +1 -0
- package/dist/cjs/components/one-time-password-input/index.d.ts +3 -0
- package/dist/cjs/components/one-time-password-input/utils.d.ts +2 -0
- package/dist/cjs/components/one-time-password-input/utils.js +18 -0
- package/dist/cjs/components/one-time-password-input/utils.js.map +1 -0
- package/dist/cjs/components/stepper/CStepper.d.ts +1 -1
- package/dist/cjs/components/time-picker/CTimePicker.d.ts +44 -0
- package/dist/cjs/components/time-picker/CTimePicker.js +63 -7
- package/dist/cjs/components/time-picker/CTimePicker.js.map +1 -1
- package/dist/cjs/components/time-picker/CTimePickerRollCol.d.ts +19 -7
- package/dist/cjs/components/time-picker/CTimePickerRollCol.js +80 -8
- package/dist/cjs/components/time-picker/CTimePickerRollCol.js.map +1 -1
- package/dist/cjs/index.js +4 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/components/autocomplete/CAutocomplete.js +17 -16
- package/dist/esm/components/autocomplete/CAutocomplete.js.map +1 -1
- package/dist/esm/components/calendar/CCalendar.js +6 -0
- package/dist/esm/components/calendar/CCalendar.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdown.d.ts +32 -7
- package/dist/esm/components/dropdown/CDropdown.js +49 -20
- package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownToggle.d.ts +19 -0
- package/dist/esm/components/dropdown/CDropdownToggle.js +10 -1
- package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
- package/dist/esm/components/dropdown/utils.d.ts +2 -0
- package/dist/esm/components/dropdown/utils.js +13 -1
- package/dist/esm/components/dropdown/utils.js.map +1 -1
- package/dist/esm/components/index.d.ts +1 -0
- package/dist/esm/components/index.js +2 -0
- package/dist/esm/components/index.js.map +1 -1
- package/dist/esm/components/nav/CNavItem.d.ts +2 -2
- package/dist/esm/components/one-time-password-input/COneTimePassword.d.ts +278 -0
- package/dist/esm/components/one-time-password-input/COneTimePassword.js +391 -0
- package/dist/esm/components/one-time-password-input/COneTimePassword.js.map +1 -0
- package/dist/esm/components/one-time-password-input/COneTimePasswordInput.d.ts +4 -0
- package/dist/esm/components/one-time-password-input/COneTimePasswordInput.js +17 -0
- package/dist/esm/components/one-time-password-input/COneTimePasswordInput.js.map +1 -0
- package/dist/esm/components/one-time-password-input/index.d.ts +3 -0
- package/dist/esm/components/one-time-password-input/utils.d.ts +2 -0
- package/dist/esm/components/one-time-password-input/utils.js +15 -0
- package/dist/esm/components/one-time-password-input/utils.js.map +1 -0
- package/dist/esm/components/stepper/CStepper.d.ts +1 -1
- package/dist/esm/components/time-picker/CTimePicker.d.ts +44 -0
- package/dist/esm/components/time-picker/CTimePicker.js +63 -7
- package/dist/esm/components/time-picker/CTimePicker.js.map +1 -1
- package/dist/esm/components/time-picker/CTimePickerRollCol.d.ts +19 -7
- package/dist/esm/components/time-picker/CTimePickerRollCol.js +80 -8
- package/dist/esm/components/time-picker/CTimePickerRollCol.js.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/package.json +6 -6
- package/src/components/autocomplete/CAutocomplete.ts +17 -16
- package/src/components/calendar/CCalendar.ts +6 -0
- package/src/components/dropdown/CDropdown.ts +92 -36
- package/src/components/dropdown/CDropdownToggle.ts +10 -1
- package/src/components/dropdown/utils.ts +21 -0
- package/src/components/index.ts +1 -0
- package/src/components/nav/CNavItem.ts +1 -1
- package/src/components/one-time-password-input/COneTimePassword.ts +459 -0
- package/src/components/one-time-password-input/COneTimePasswordInput.ts +21 -0
- package/src/components/one-time-password-input/__tests__/COneTimePassword.spec.ts +210 -0
- package/src/components/one-time-password-input/__tests__/__snapshots__/COneTimePassword.spec.ts.snap +32 -0
- package/src/components/one-time-password-input/index.ts +4 -0
- package/src/components/one-time-password-input/utils.ts +13 -0
- package/src/components/time-picker/CTimePicker.ts +68 -9
- package/src/components/time-picker/CTimePickerRollCol.ts +87 -9
|
@@ -785,22 +785,23 @@ const CAutocomplete = defineComponent({
|
|
|
785
785
|
handleClear()
|
|
786
786
|
},
|
|
787
787
|
}),
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
event
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
788
|
+
props.indicator &&
|
|
789
|
+
h('button', {
|
|
790
|
+
type: 'button',
|
|
791
|
+
class: 'autocomplete-indicator',
|
|
792
|
+
disabled:
|
|
793
|
+
!(props.searchNoResultsLabel || filteredOptions.value.length > 0) &&
|
|
794
|
+
!isExternalSearch(props.search),
|
|
795
|
+
onClick: (event: Event) => {
|
|
796
|
+
event.preventDefault()
|
|
797
|
+
event.stopPropagation()
|
|
798
|
+
if (visible.value) {
|
|
799
|
+
handleDropdownHide()
|
|
800
|
+
} else {
|
|
801
|
+
handleDropdownShow()
|
|
802
|
+
}
|
|
803
|
+
},
|
|
804
|
+
}),
|
|
804
805
|
]),
|
|
805
806
|
]
|
|
806
807
|
),
|
|
@@ -905,6 +905,7 @@ const CCalendar = defineComponent({
|
|
|
905
905
|
h(
|
|
906
906
|
'button',
|
|
907
907
|
{
|
|
908
|
+
type: 'button',
|
|
908
909
|
class: 'calendar-nav-btn',
|
|
909
910
|
'aria-label': props.ariaNavPrevYearLabel,
|
|
910
911
|
onClick: () => handleNavigationOnClick('prev', true),
|
|
@@ -920,6 +921,7 @@ const CCalendar = defineComponent({
|
|
|
920
921
|
h(
|
|
921
922
|
'button',
|
|
922
923
|
{
|
|
924
|
+
type: 'button',
|
|
923
925
|
class: 'calendar-nav-btn',
|
|
924
926
|
'aria-label': props.ariaNavPrevMonthLabel,
|
|
925
927
|
onClick: () => handleNavigationOnClick('prev'),
|
|
@@ -945,6 +947,7 @@ const CCalendar = defineComponent({
|
|
|
945
947
|
h(
|
|
946
948
|
'button',
|
|
947
949
|
{
|
|
950
|
+
type: 'button',
|
|
948
951
|
class: 'calendar-nav-btn',
|
|
949
952
|
onClick: () => {
|
|
950
953
|
if (props.navigation) view.value = 'months'
|
|
@@ -955,6 +958,7 @@ const CCalendar = defineComponent({
|
|
|
955
958
|
h(
|
|
956
959
|
'button',
|
|
957
960
|
{
|
|
961
|
+
type: 'button',
|
|
958
962
|
class: 'calendar-nav-btn',
|
|
959
963
|
onClick: () => {
|
|
960
964
|
if (props.navigation) view.value = 'years'
|
|
@@ -976,6 +980,7 @@ const CCalendar = defineComponent({
|
|
|
976
980
|
h(
|
|
977
981
|
'button',
|
|
978
982
|
{
|
|
983
|
+
type: 'button',
|
|
979
984
|
class: 'calendar-nav-btn',
|
|
980
985
|
'aria-label': props.ariaNavNextMonthLabel,
|
|
981
986
|
onClick: () => handleNavigationOnClick('next'),
|
|
@@ -990,6 +995,7 @@ const CCalendar = defineComponent({
|
|
|
990
995
|
h(
|
|
991
996
|
'button',
|
|
992
997
|
{
|
|
998
|
+
type: 'button',
|
|
993
999
|
class: 'calendar-nav-btn',
|
|
994
1000
|
'aria-label': props.ariaNavNextYearLabel,
|
|
995
1001
|
onClick: () => handleNavigationOnClick('next', true),
|
|
@@ -1,4 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
computed,
|
|
3
|
+
defineComponent,
|
|
4
|
+
h,
|
|
5
|
+
nextTick,
|
|
6
|
+
onUnmounted,
|
|
7
|
+
provide,
|
|
8
|
+
PropType,
|
|
9
|
+
ref,
|
|
10
|
+
Ref,
|
|
11
|
+
watch,
|
|
12
|
+
} from 'vue'
|
|
2
13
|
import type { Placement } from '@popperjs/core'
|
|
3
14
|
|
|
4
15
|
import { usePopper } from '../../composables'
|
|
@@ -6,7 +17,8 @@ import type { Triggers } from '../../types'
|
|
|
6
17
|
import { getNextActiveElement, isRTL } from '../../utils'
|
|
7
18
|
|
|
8
19
|
import type { Alignments } from './types'
|
|
9
|
-
import { getPlacement } from './utils'
|
|
20
|
+
import { getPlacement, getReferenceElement } from './utils'
|
|
21
|
+
import { CFocusTrap } from '../focus-trap'
|
|
10
22
|
|
|
11
23
|
const CDropdown = defineComponent({
|
|
12
24
|
name: 'CDropdown',
|
|
@@ -53,7 +65,7 @@ const CDropdown = defineComponent({
|
|
|
53
65
|
* - `'outside'` - the dropdown will be closed (only) by clicking outside the dropdown menu.
|
|
54
66
|
*/
|
|
55
67
|
autoClose: {
|
|
56
|
-
type: [Boolean, String]
|
|
68
|
+
type: [Boolean, String] as PropType<boolean | 'inside' | 'outside'>,
|
|
57
69
|
default: true,
|
|
58
70
|
validator: (value: boolean | string) => {
|
|
59
71
|
return typeof value === 'boolean' || ['inside', 'outside'].includes(value)
|
|
@@ -112,6 +124,21 @@ const CDropdown = defineComponent({
|
|
|
112
124
|
type: Boolean,
|
|
113
125
|
default: true,
|
|
114
126
|
},
|
|
127
|
+
/**
|
|
128
|
+
* Sets the reference element for positioning the Vue Dropdown Menu.
|
|
129
|
+
* - `toggle` - The Vue Dropdown Toggle button (default).
|
|
130
|
+
* - `parent` - The Vue Dropdown wrapper element.
|
|
131
|
+
* - `HTMLElement` - A custom HTML element.
|
|
132
|
+
* - `Ref` - A custom reference element.
|
|
133
|
+
*
|
|
134
|
+
* @since 5.7.0
|
|
135
|
+
*/
|
|
136
|
+
reference: {
|
|
137
|
+
type: [String, Object] as PropType<
|
|
138
|
+
'parent' | 'toggle' | HTMLElement | Ref<HTMLElement | null>
|
|
139
|
+
>,
|
|
140
|
+
default: 'toggle',
|
|
141
|
+
},
|
|
115
142
|
/**
|
|
116
143
|
* Generates dropdown menu using Teleport.
|
|
117
144
|
*
|
|
@@ -156,15 +183,16 @@ const CDropdown = defineComponent({
|
|
|
156
183
|
'show',
|
|
157
184
|
],
|
|
158
185
|
setup(props, { slots, emit }) {
|
|
159
|
-
const
|
|
160
|
-
const dropdownMenuRef = ref()
|
|
186
|
+
const dropdownRef = ref<HTMLElement | null>(null)
|
|
187
|
+
const dropdownMenuRef = ref<HTMLElement | null>(null)
|
|
188
|
+
const dropdownToggleRef = ref<HTMLElement | null>(null)
|
|
161
189
|
const pendingKeyDownEventRef = ref<KeyboardEvent | null>(null)
|
|
162
190
|
const popper = ref(typeof props.alignment === 'object' ? false : props.popper)
|
|
163
191
|
const visible = ref(props.visible)
|
|
164
192
|
|
|
165
193
|
const { initPopper, destroyPopper } = usePopper()
|
|
166
194
|
|
|
167
|
-
const popperConfig = {
|
|
195
|
+
const popperConfig = computed(() => ({
|
|
168
196
|
modifiers: [
|
|
169
197
|
{
|
|
170
198
|
name: 'offset',
|
|
@@ -179,7 +207,7 @@ const CDropdown = defineComponent({
|
|
|
179
207
|
props.alignment,
|
|
180
208
|
isRTL(dropdownMenuRef.value)
|
|
181
209
|
) as Placement,
|
|
182
|
-
}
|
|
210
|
+
}))
|
|
183
211
|
|
|
184
212
|
watch(
|
|
185
213
|
() => props.visible,
|
|
@@ -190,11 +218,16 @@ const CDropdown = defineComponent({
|
|
|
190
218
|
|
|
191
219
|
watch(visible, () => {
|
|
192
220
|
if (visible.value && dropdownToggleRef.value && dropdownMenuRef.value) {
|
|
193
|
-
|
|
194
|
-
|
|
221
|
+
const referenceElement = getReferenceElement(
|
|
222
|
+
props.reference,
|
|
223
|
+
dropdownToggleRef,
|
|
224
|
+
dropdownRef
|
|
225
|
+
)
|
|
226
|
+
if (referenceElement && popper.value) {
|
|
227
|
+
initPopper(referenceElement, dropdownMenuRef.value, popperConfig.value)
|
|
195
228
|
}
|
|
196
229
|
|
|
197
|
-
window.addEventListener('
|
|
230
|
+
window.addEventListener('click', handleClick)
|
|
198
231
|
window.addEventListener('keyup', handleKeyup)
|
|
199
232
|
dropdownToggleRef.value.addEventListener('keydown', handleKeydown)
|
|
200
233
|
dropdownMenuRef.value.addEventListener('keydown', handleKeydown)
|
|
@@ -205,15 +238,20 @@ const CDropdown = defineComponent({
|
|
|
205
238
|
pendingKeyDownEventRef.value = null
|
|
206
239
|
})
|
|
207
240
|
}
|
|
208
|
-
|
|
241
|
+
|
|
209
242
|
emit('show')
|
|
210
243
|
return
|
|
211
244
|
}
|
|
212
245
|
|
|
213
|
-
popper.value
|
|
214
|
-
|
|
246
|
+
if (popper.value) {
|
|
247
|
+
destroyPopper()
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
window.removeEventListener('click', handleClick)
|
|
215
251
|
window.removeEventListener('keyup', handleKeyup)
|
|
216
252
|
dropdownMenuRef.value && dropdownMenuRef.value.removeEventListener('keydown', handleKeydown)
|
|
253
|
+
dropdownToggleRef.value &&
|
|
254
|
+
dropdownToggleRef.value.removeEventListener('keydown', handleKeydown)
|
|
217
255
|
emit('hide')
|
|
218
256
|
})
|
|
219
257
|
|
|
@@ -259,24 +297,36 @@ const CDropdown = defineComponent({
|
|
|
259
297
|
}
|
|
260
298
|
}
|
|
261
299
|
|
|
262
|
-
const
|
|
300
|
+
const handleClick = (event: Event) => {
|
|
263
301
|
if (!dropdownToggleRef.value || !dropdownMenuRef.value) {
|
|
264
302
|
return
|
|
265
303
|
}
|
|
266
304
|
|
|
267
|
-
if (
|
|
305
|
+
if ((event as MouseEvent).button === 2) {
|
|
306
|
+
return
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
const composedPath = event.composedPath()
|
|
310
|
+
const isOnToggle = composedPath.includes(dropdownToggleRef.value)
|
|
311
|
+
const isOnMenu = composedPath.includes(dropdownMenuRef.value)
|
|
312
|
+
|
|
313
|
+
if (isOnToggle) {
|
|
314
|
+
return
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
const target = event.target as HTMLElement | null
|
|
318
|
+
const FORM_TAG_RE = /^(input|select|option|textarea|form|button|label)$/i
|
|
319
|
+
|
|
320
|
+
if (isOnMenu && target && FORM_TAG_RE.test(target.tagName)) {
|
|
268
321
|
return
|
|
269
322
|
}
|
|
270
323
|
|
|
271
324
|
if (
|
|
272
325
|
props.autoClose === true ||
|
|
273
|
-
(props.autoClose === 'inside' &&
|
|
274
|
-
|
|
275
|
-
(props.autoClose === 'outside' &&
|
|
276
|
-
!dropdownMenuRef.value.contains(event.target as HTMLElement))
|
|
326
|
+
(props.autoClose === 'inside' && isOnMenu) ||
|
|
327
|
+
(props.autoClose === 'outside' && !isOnMenu)
|
|
277
328
|
) {
|
|
278
329
|
setVisible(false)
|
|
279
|
-
return
|
|
280
330
|
}
|
|
281
331
|
}
|
|
282
332
|
|
|
@@ -299,22 +349,28 @@ const CDropdown = defineComponent({
|
|
|
299
349
|
provide('setVisible', setVisible)
|
|
300
350
|
|
|
301
351
|
return () =>
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
:
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
:
|
|
312
|
-
? '
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
352
|
+
h(
|
|
353
|
+
CFocusTrap,
|
|
354
|
+
{ active: props.teleport && visible.value, additionalContainer: dropdownMenuRef },
|
|
355
|
+
() =>
|
|
356
|
+
props.variant === 'input-group'
|
|
357
|
+
? [slots.default && slots.default()]
|
|
358
|
+
: h(
|
|
359
|
+
'div',
|
|
360
|
+
{
|
|
361
|
+
class: [
|
|
362
|
+
props.variant === 'nav-item' ? 'nav-item dropdown' : props.variant,
|
|
363
|
+
props.direction === 'center'
|
|
364
|
+
? 'dropdown-center'
|
|
365
|
+
: props.direction === 'dropup-center'
|
|
366
|
+
? 'dropup dropup-center'
|
|
367
|
+
: props.direction,
|
|
368
|
+
],
|
|
369
|
+
ref: dropdownRef,
|
|
370
|
+
},
|
|
371
|
+
slots.default && slots.default()
|
|
372
|
+
)
|
|
373
|
+
)
|
|
318
374
|
},
|
|
319
375
|
})
|
|
320
376
|
|
|
@@ -74,6 +74,15 @@ const CDropdownToggle = defineComponent({
|
|
|
74
74
|
* Similarly, create split button dropdowns with virtually the same markup as single button dropdowns, but with the addition of `.dropdown-toggle-split` className for proper spacing around the dropdown caret.
|
|
75
75
|
*/
|
|
76
76
|
split: Boolean,
|
|
77
|
+
/**
|
|
78
|
+
* Screen reader label for split button dropdown toggle.
|
|
79
|
+
*
|
|
80
|
+
* @since 5.7.0
|
|
81
|
+
*/
|
|
82
|
+
splitLabel: {
|
|
83
|
+
type: String,
|
|
84
|
+
default: 'Toggle Dropdown',
|
|
85
|
+
},
|
|
77
86
|
/**
|
|
78
87
|
* Sets which event handlers you’d like provided to your toggle prop. You can specify one trigger or an array of them.
|
|
79
88
|
*
|
|
@@ -194,7 +203,7 @@ const CDropdownToggle = defineComponent({
|
|
|
194
203
|
},
|
|
195
204
|
() =>
|
|
196
205
|
props.split
|
|
197
|
-
? h('span', { class: 'visually-hidden' },
|
|
206
|
+
? h('span', { class: 'visually-hidden' }, props.splitLabel)
|
|
198
207
|
: slots.default && slots.default(),
|
|
199
208
|
)
|
|
200
209
|
},
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Ref } from 'vue'
|
|
1
2
|
import type { Placement } from '@popperjs/core'
|
|
2
3
|
import type { Placements } from '../../types'
|
|
3
4
|
import type { Alignments, Breakpoints } from './types'
|
|
@@ -49,3 +50,23 @@ export const getPlacement = (
|
|
|
49
50
|
|
|
50
51
|
return _placement
|
|
51
52
|
}
|
|
53
|
+
|
|
54
|
+
export const getReferenceElement = (
|
|
55
|
+
reference: 'parent' | 'toggle' | Ref<HTMLElement | null> | HTMLElement,
|
|
56
|
+
dropdownToggleRef: Ref<HTMLElement | null>,
|
|
57
|
+
dropdownRef: Ref<HTMLElement | null>
|
|
58
|
+
): HTMLElement | null => {
|
|
59
|
+
if (reference === 'parent') {
|
|
60
|
+
return dropdownRef.value
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (reference instanceof HTMLElement) {
|
|
64
|
+
return reference
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (reference instanceof Object && 'value' in reference) {
|
|
68
|
+
return reference.value
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return dropdownToggleRef.value
|
|
72
|
+
}
|
package/src/components/index.ts
CHANGED