@coreui/vue-pro 5.8.1 → 5.10.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/CAccordionBody.js +2 -1
- package/dist/cjs/components/accordion/CAccordionBody.js.map +1 -1
- package/dist/cjs/components/accordion/CAccordionButton.js +3 -1
- package/dist/cjs/components/accordion/CAccordionButton.js.map +1 -1
- package/dist/cjs/components/accordion/CAccordionItem.d.ts +8 -0
- package/dist/cjs/components/accordion/CAccordionItem.js +10 -2
- package/dist/cjs/components/accordion/CAccordionItem.js.map +1 -1
- package/dist/cjs/components/calendar/CCalendar.d.ts +8 -7
- package/dist/cjs/components/calendar/CCalendar.js +41 -37
- package/dist/cjs/components/calendar/CCalendar.js.map +1 -1
- package/dist/cjs/components/calendar/types.d.ts +3 -0
- package/dist/cjs/components/calendar/utils.d.ts +176 -18
- package/dist/cjs/components/calendar/utils.js +327 -51
- package/dist/cjs/components/calendar/utils.js.map +1 -1
- package/dist/cjs/components/date-picker/CDatePicker.d.ts +3 -6
- package/dist/cjs/components/date-picker/CDatePicker.js +1 -3
- package/dist/cjs/components/date-picker/CDatePicker.js.map +1 -1
- package/dist/cjs/components/date-range-picker/CDateRangePicker.d.ts +3 -2
- package/dist/cjs/components/date-range-picker/CDateRangePicker.js +1 -1
- package/dist/cjs/components/date-range-picker/CDateRangePicker.js.map +1 -1
- package/dist/cjs/components/multi-select/CMultiSelect.js +5 -1
- package/dist/cjs/components/multi-select/CMultiSelect.js.map +1 -1
- package/dist/cjs/components/nav/CNavGroup.js +6 -2
- package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
- package/dist/cjs/components/range-slider/CRangeSlider.js +6 -2
- package/dist/cjs/components/range-slider/CRangeSlider.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +2 -1
- package/dist/cjs/utils/isEqual.d.ts +2 -0
- package/dist/cjs/utils/isEqual.js +78 -0
- package/dist/cjs/utils/isEqual.js.map +1 -0
- package/dist/esm/components/accordion/CAccordionBody.js +2 -1
- package/dist/esm/components/accordion/CAccordionBody.js.map +1 -1
- package/dist/esm/components/accordion/CAccordionButton.js +3 -1
- package/dist/esm/components/accordion/CAccordionButton.js.map +1 -1
- package/dist/esm/components/accordion/CAccordionItem.d.ts +8 -0
- package/dist/esm/components/accordion/CAccordionItem.js +11 -3
- package/dist/esm/components/accordion/CAccordionItem.js.map +1 -1
- package/dist/esm/components/calendar/CCalendar.d.ts +8 -7
- package/dist/esm/components/calendar/CCalendar.js +43 -39
- package/dist/esm/components/calendar/CCalendar.js.map +1 -1
- package/dist/esm/components/calendar/types.d.ts +3 -0
- package/dist/esm/components/calendar/utils.d.ts +176 -18
- package/dist/esm/components/calendar/utils.js +321 -52
- package/dist/esm/components/calendar/utils.js.map +1 -1
- package/dist/esm/components/date-picker/CDatePicker.d.ts +3 -6
- package/dist/esm/components/date-picker/CDatePicker.js +1 -3
- package/dist/esm/components/date-picker/CDatePicker.js.map +1 -1
- package/dist/esm/components/date-range-picker/CDateRangePicker.d.ts +3 -2
- package/dist/esm/components/date-range-picker/CDateRangePicker.js +1 -1
- package/dist/esm/components/date-range-picker/CDateRangePicker.js.map +1 -1
- package/dist/esm/components/multi-select/CMultiSelect.js +5 -1
- package/dist/esm/components/multi-select/CMultiSelect.js.map +1 -1
- package/dist/esm/components/nav/CNavGroup.js +6 -2
- package/dist/esm/components/nav/CNavGroup.js.map +1 -1
- package/dist/esm/components/range-slider/CRangeSlider.js +6 -2
- package/dist/esm/components/range-slider/CRangeSlider.js.map +1 -1
- package/dist/esm/utils/index.d.ts +2 -1
- package/dist/esm/utils/isEqual.d.ts +2 -0
- package/dist/esm/utils/isEqual.js +74 -0
- package/dist/esm/utils/isEqual.js.map +1 -0
- package/package.json +8 -8
- package/src/components/accordion/CAccordionBody.ts +2 -1
- package/src/components/accordion/CAccordionButton.ts +3 -1
- package/src/components/accordion/CAccordionItem.ts +11 -3
- package/src/components/calendar/CCalendar.ts +64 -52
- package/src/components/calendar/types.ts +5 -0
- package/src/components/calendar/utils.ts +428 -110
- package/src/components/date-picker/CDatePicker.ts +2 -3
- package/src/components/date-range-picker/CDateRangePicker.ts +3 -1
- package/src/components/multi-select/CMultiSelect.ts +10 -2
- package/src/components/nav/CNavGroup.ts +7 -2
- package/src/components/range-slider/CRangeSlider.ts +7 -2
- package/src/utils/index.ts +10 -1
- package/src/utils/isEqual.ts +75 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent, h, PropType, ref, watch } from 'vue'
|
|
1
|
+
import { defineComponent, h, nextTick, PropType, ref, watch } from 'vue'
|
|
2
2
|
|
|
3
3
|
import { CButton } from '../button'
|
|
4
4
|
|
|
@@ -14,10 +14,19 @@ import {
|
|
|
14
14
|
isDateInRange,
|
|
15
15
|
isDateSelected,
|
|
16
16
|
isDisableDateInRange,
|
|
17
|
-
|
|
17
|
+
isMonthDisabled,
|
|
18
|
+
isMonthInRange,
|
|
19
|
+
isMonthSelected,
|
|
18
20
|
isToday,
|
|
21
|
+
isSameDateAs,
|
|
22
|
+
isYearDisabled,
|
|
23
|
+
isYearInRange,
|
|
24
|
+
isYearSelected,
|
|
25
|
+
getSelectableDates,
|
|
19
26
|
} from './utils'
|
|
20
27
|
|
|
28
|
+
import type { DisabledDate, SelectionTypes, ViewTypes } from './types'
|
|
29
|
+
|
|
21
30
|
const CCalendar = defineComponent({
|
|
22
31
|
name: 'CCalendar',
|
|
23
32
|
props: {
|
|
@@ -95,7 +104,7 @@ const CCalendar = defineComponent({
|
|
|
95
104
|
* Specify the list of dates that cannot be selected.
|
|
96
105
|
*/
|
|
97
106
|
disabledDates: {
|
|
98
|
-
type: Array as PropType<
|
|
107
|
+
type: [Array, Date, Function] as PropType<DisabledDate | DisabledDate[]>,
|
|
99
108
|
},
|
|
100
109
|
/**
|
|
101
110
|
* Initial selected to date (range).
|
|
@@ -163,9 +172,9 @@ const CCalendar = defineComponent({
|
|
|
163
172
|
* @since 5.0.0
|
|
164
173
|
*/
|
|
165
174
|
selectionType: {
|
|
166
|
-
type: String as PropType<
|
|
175
|
+
type: String as PropType<SelectionTypes>,
|
|
167
176
|
default: 'day',
|
|
168
|
-
validator: (value:
|
|
177
|
+
validator: (value: SelectionTypes) => ['day', 'week', 'month', 'year'].includes(value),
|
|
169
178
|
},
|
|
170
179
|
/**
|
|
171
180
|
* Set whether to display dates in adjacent months (non-selectable) at the start and end of the current month.
|
|
@@ -263,25 +272,19 @@ const CCalendar = defineComponent({
|
|
|
263
272
|
props.minDate ? convertToDateObject(props.minDate, props.selectionType) : null,
|
|
264
273
|
)
|
|
265
274
|
const selectEndDate = ref(props.selectEndDate)
|
|
266
|
-
const view = ref<
|
|
275
|
+
const view = ref<ViewTypes>('days')
|
|
267
276
|
|
|
268
277
|
watch(
|
|
269
278
|
() => props.selectionType,
|
|
270
279
|
() => {
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
280
|
+
const viewMap = {
|
|
281
|
+
day: 'days',
|
|
282
|
+
week: 'days',
|
|
283
|
+
month: 'months',
|
|
284
|
+
year: 'years',
|
|
274
285
|
}
|
|
275
286
|
|
|
276
|
-
|
|
277
|
-
view.value = 'months'
|
|
278
|
-
return
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
if (props.selectionType === 'year') {
|
|
282
|
-
view.value = 'years'
|
|
283
|
-
return
|
|
284
|
-
}
|
|
287
|
+
view.value = (viewMap[props.selectionType] as ViewTypes) || 'days'
|
|
285
288
|
},
|
|
286
289
|
{ immediate: true },
|
|
287
290
|
)
|
|
@@ -355,9 +358,17 @@ const CCalendar = defineComponent({
|
|
|
355
358
|
const month = calendarDate.value.getMonth()
|
|
356
359
|
const d = new Date(year, month, 1)
|
|
357
360
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
+
if (years) {
|
|
362
|
+
d.setFullYear(d.getFullYear() + years)
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
if (months) {
|
|
366
|
+
d.setMonth(d.getMonth() + months)
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
if (typeof setMonth === 'number') {
|
|
370
|
+
d.setMonth(setMonth)
|
|
371
|
+
}
|
|
361
372
|
|
|
362
373
|
calendarDate.value = d
|
|
363
374
|
|
|
@@ -365,10 +376,6 @@ const CCalendar = defineComponent({
|
|
|
365
376
|
}
|
|
366
377
|
|
|
367
378
|
const handleCalendarClick = (date: Date, index?: number) => {
|
|
368
|
-
if (isDateDisabled(date, minDate.value, maxDate.value, props.disabledDates)) {
|
|
369
|
-
return
|
|
370
|
-
}
|
|
371
|
-
|
|
372
379
|
const _date = new Date(date)
|
|
373
380
|
|
|
374
381
|
if (view.value === 'days') {
|
|
@@ -389,6 +396,11 @@ const CCalendar = defineComponent({
|
|
|
389
396
|
return
|
|
390
397
|
}
|
|
391
398
|
|
|
399
|
+
// Allow to change the calendarDate but not startDate or endDate
|
|
400
|
+
if (isDateDisabled(date, minDate.value, maxDate.value, props.disabledDates)) {
|
|
401
|
+
return
|
|
402
|
+
}
|
|
403
|
+
|
|
392
404
|
if (props.range) {
|
|
393
405
|
if (selectEndDate.value) {
|
|
394
406
|
selectEndDate.value = false
|
|
@@ -432,7 +444,17 @@ const CCalendar = defineComponent({
|
|
|
432
444
|
const handleCalendarKeyDown = (event: KeyboardEvent, date: Date, index?: number) => {
|
|
433
445
|
if (event.code === 'Space' || event.key === 'Enter') {
|
|
434
446
|
event.preventDefault()
|
|
447
|
+
const _view = view.value
|
|
435
448
|
handleCalendarClick(date, index)
|
|
449
|
+
if (
|
|
450
|
+
(_view === 'months' && props.selectionType !== 'month') ||
|
|
451
|
+
(_view === 'years' && props.selectionType !== 'year')
|
|
452
|
+
) {
|
|
453
|
+
nextTick(() => {
|
|
454
|
+
const list: HTMLElement[] = getSelectableDates(calendarRef.value as HTMLDivElement)
|
|
455
|
+
list[0]?.focus()
|
|
456
|
+
})
|
|
457
|
+
}
|
|
436
458
|
}
|
|
437
459
|
|
|
438
460
|
if (
|
|
@@ -445,7 +467,7 @@ const CCalendar = defineComponent({
|
|
|
445
467
|
|
|
446
468
|
if (
|
|
447
469
|
maxDate.value &&
|
|
448
|
-
date >=
|
|
470
|
+
date >= maxDate.value &&
|
|
449
471
|
(event.key === 'ArrowRight' || event.key === 'ArrowDown')
|
|
450
472
|
) {
|
|
451
473
|
return
|
|
@@ -453,7 +475,7 @@ const CCalendar = defineComponent({
|
|
|
453
475
|
|
|
454
476
|
if (
|
|
455
477
|
minDate.value &&
|
|
456
|
-
date <=
|
|
478
|
+
date <= minDate.value &&
|
|
457
479
|
(event.key === 'ArrowLeft' || event.key === 'ArrowUp')
|
|
458
480
|
) {
|
|
459
481
|
return
|
|
@@ -465,13 +487,7 @@ const CCalendar = defineComponent({
|
|
|
465
487
|
element = element.closest('tr[tabindex="0"]') as HTMLElement
|
|
466
488
|
}
|
|
467
489
|
|
|
468
|
-
const list: HTMLElement[] = calendarRef.value
|
|
469
|
-
? Array.from(
|
|
470
|
-
calendarRef.value.querySelectorAll(
|
|
471
|
-
props.selectionType === 'week' ? 'tr[tabindex="0"]' : 'td[tabindex="0"]',
|
|
472
|
-
),
|
|
473
|
-
)
|
|
474
|
-
: []
|
|
490
|
+
const list: HTMLElement[] = getSelectableDates(calendarRef.value as HTMLDivElement)
|
|
475
491
|
|
|
476
492
|
const index = list.indexOf(element)
|
|
477
493
|
const first = index === 0
|
|
@@ -518,20 +534,16 @@ const CCalendar = defineComponent({
|
|
|
518
534
|
}
|
|
519
535
|
|
|
520
536
|
setTimeout(() => {
|
|
521
|
-
const _list: HTMLElement[] =
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
'td[tabindex="0"], tr[tabindex="0"]',
|
|
525
|
-
),
|
|
526
|
-
)
|
|
527
|
-
: []
|
|
537
|
+
const _list: HTMLElement[] = getSelectableDates(
|
|
538
|
+
element.parentNode?.parentNode as HTMLDivElement,
|
|
539
|
+
)
|
|
528
540
|
|
|
529
541
|
if (_list.length > 0 && event.key === 'ArrowRight') {
|
|
530
542
|
_list[0].focus()
|
|
531
543
|
}
|
|
532
544
|
|
|
533
545
|
if (_list.length > 0 && event.key === 'ArrowLeft') {
|
|
534
|
-
_list
|
|
546
|
+
_list.at(-1)?.focus()
|
|
535
547
|
}
|
|
536
548
|
|
|
537
549
|
if (_list.length > 0 && event.key === 'ArrowDown') {
|
|
@@ -791,13 +803,13 @@ const CCalendar = defineComponent({
|
|
|
791
803
|
row.map((month, idx) => {
|
|
792
804
|
const monthNumber = index * 3 + idx
|
|
793
805
|
const date = new Date(_calendarDate.getFullYear(), monthNumber, 1)
|
|
794
|
-
const isDisabled =
|
|
806
|
+
const isDisabled = isMonthDisabled(
|
|
795
807
|
date,
|
|
796
808
|
minDate.value,
|
|
797
809
|
maxDate.value,
|
|
798
810
|
props.disabledDates,
|
|
799
811
|
)
|
|
800
|
-
const isSelected =
|
|
812
|
+
const isSelected = isMonthSelected(date, startDate.value, endDate.value)
|
|
801
813
|
return h(
|
|
802
814
|
'td',
|
|
803
815
|
{
|
|
@@ -809,9 +821,9 @@ const CCalendar = defineComponent({
|
|
|
809
821
|
'range-hover':
|
|
810
822
|
props.selectionType === 'month' &&
|
|
811
823
|
(hoverDate.value && selectEndDate.value
|
|
812
|
-
?
|
|
813
|
-
:
|
|
814
|
-
range:
|
|
824
|
+
? isMonthInRange(date, startDate.value, hoverDate.value)
|
|
825
|
+
: isMonthInRange(date, hoverDate.value, endDate.value)),
|
|
826
|
+
range: isMonthInRange(date, startDate.value, endDate.value),
|
|
815
827
|
},
|
|
816
828
|
],
|
|
817
829
|
tabindex: isDisabled ? -1 : 0,
|
|
@@ -837,13 +849,13 @@ const CCalendar = defineComponent({
|
|
|
837
849
|
{},
|
|
838
850
|
row.map((year) => {
|
|
839
851
|
const date = new Date(year, 0, 1)
|
|
840
|
-
const isDisabled =
|
|
852
|
+
const isDisabled = isYearDisabled(
|
|
841
853
|
date,
|
|
842
854
|
minDate.value,
|
|
843
855
|
maxDate.value,
|
|
844
856
|
props.disabledDates,
|
|
845
857
|
)
|
|
846
|
-
const isSelected =
|
|
858
|
+
const isSelected = isYearSelected(date, startDate.value, endDate.value)
|
|
847
859
|
return h(
|
|
848
860
|
'td',
|
|
849
861
|
{
|
|
@@ -855,9 +867,9 @@ const CCalendar = defineComponent({
|
|
|
855
867
|
'range-hover':
|
|
856
868
|
props.selectionType === 'year' &&
|
|
857
869
|
(hoverDate.value && selectEndDate.value
|
|
858
|
-
?
|
|
859
|
-
:
|
|
860
|
-
range:
|
|
870
|
+
? isYearInRange(date, startDate.value, hoverDate.value)
|
|
871
|
+
: isYearInRange(date, hoverDate.value, endDate.value)),
|
|
872
|
+
range: isYearInRange(date, startDate.value, endDate.value),
|
|
861
873
|
},
|
|
862
874
|
],
|
|
863
875
|
tabindex: isDisabled ? -1 : 0,
|