@coreui/vue-pro 5.10.0 → 5.11.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.
Files changed (150) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/button/CButton.js +1 -1
  3. package/dist/cjs/components/button/CButton.js.map +1 -1
  4. package/dist/cjs/components/calendar/CCalendar.js +4 -3
  5. package/dist/cjs/components/calendar/CCalendar.js.map +1 -1
  6. package/dist/cjs/components/calendar/utils.d.ts +8 -0
  7. package/dist/cjs/components/calendar/utils.js +16 -0
  8. package/dist/cjs/components/calendar/utils.js.map +1 -1
  9. package/dist/cjs/components/form/CFormControlWrapper.d.ts +2 -0
  10. package/dist/cjs/components/form/CFormControlWrapper.js +9 -1
  11. package/dist/cjs/components/form/CFormControlWrapper.js.map +1 -1
  12. package/dist/cjs/components/index.d.ts +2 -0
  13. package/dist/cjs/components/index.js +44 -36
  14. package/dist/cjs/components/index.js.map +1 -1
  15. package/dist/cjs/components/link/CLink.js.map +1 -1
  16. package/dist/cjs/components/loading-button/CLoadingButton.d.ts +2 -2
  17. package/dist/cjs/components/multi-select/CMultiSelect.d.ts +12 -0
  18. package/dist/cjs/components/multi-select/CMultiSelect.js +23 -1
  19. package/dist/cjs/components/multi-select/CMultiSelect.js.map +1 -1
  20. package/dist/cjs/components/nav/CNav.d.ts +2 -2
  21. package/dist/cjs/components/nav/CNav.js +3 -2
  22. package/dist/cjs/components/nav/CNav.js.map +1 -1
  23. package/dist/cjs/components/offcanvas/COffcanvas.js.map +1 -1
  24. package/dist/cjs/components/password-input/CPasswordInput.d.ts +190 -0
  25. package/dist/cjs/components/password-input/CPasswordInput.js +178 -0
  26. package/dist/cjs/components/password-input/CPasswordInput.js.map +1 -0
  27. package/dist/cjs/components/password-input/index.d.ts +6 -0
  28. package/dist/cjs/components/password-input/index.js +13 -0
  29. package/dist/cjs/components/password-input/index.js.map +1 -0
  30. package/dist/cjs/components/popover/CPopover.d.ts +1 -1
  31. package/dist/cjs/components/rating/CRating.d.ts +1 -1
  32. package/dist/cjs/components/smart-table/CSmartTable.js +2 -2
  33. package/dist/cjs/components/smart-table/CSmartTable.js.map +1 -1
  34. package/dist/cjs/components/smart-table/utils.js.map +1 -1
  35. package/dist/cjs/components/stepper/CStepper.d.ts +168 -0
  36. package/dist/cjs/components/stepper/CStepper.js +305 -0
  37. package/dist/cjs/components/stepper/CStepper.js.map +1 -0
  38. package/dist/cjs/components/stepper/index.d.ts +6 -0
  39. package/dist/cjs/components/stepper/index.js +13 -0
  40. package/dist/cjs/components/stepper/index.js.map +1 -0
  41. package/dist/cjs/components/stepper/types.d.ts +15 -0
  42. package/dist/cjs/components/tabs/CTab.js.map +1 -1
  43. package/dist/cjs/components/tabs/CTabList.d.ts +2 -2
  44. package/dist/cjs/components/tabs/CTabList.js +3 -2
  45. package/dist/cjs/components/tabs/CTabList.js.map +1 -1
  46. package/dist/cjs/components/time-picker/utils.d.ts +10 -0
  47. package/dist/cjs/components/time-picker/utils.js +25 -9
  48. package/dist/cjs/components/time-picker/utils.js.map +1 -1
  49. package/dist/cjs/components/tooltip/CTooltip.d.ts +1 -1
  50. package/dist/cjs/components/widgets/CWidgetStatsB.js +2 -2
  51. package/dist/cjs/components/widgets/CWidgetStatsB.js.map +1 -1
  52. package/dist/cjs/components/widgets/CWidgetStatsC.js +2 -2
  53. package/dist/cjs/components/widgets/CWidgetStatsC.js.map +1 -1
  54. package/dist/cjs/index.js +50 -42
  55. package/dist/cjs/index.js.map +1 -1
  56. package/dist/cjs/node_modules/vue-types/dist/index.js +567 -0
  57. package/dist/cjs/node_modules/vue-types/dist/index.js.map +1 -0
  58. package/dist/cjs/node_modules/vue-types/dist/shared/vue-types.8139b772.js +29 -0
  59. package/dist/cjs/node_modules/vue-types/dist/shared/vue-types.8139b772.js.map +1 -0
  60. package/dist/cjs/utils/getNextActiveElement.js.map +1 -1
  61. package/dist/esm/components/avatar/CAvatar.js +1 -1
  62. package/dist/esm/components/badge/CBadge.js +1 -1
  63. package/dist/esm/components/button/CButton.js +2 -2
  64. package/dist/esm/components/button/CButton.js.map +1 -1
  65. package/dist/esm/components/calendar/CCalendar.js +5 -4
  66. package/dist/esm/components/calendar/CCalendar.js.map +1 -1
  67. package/dist/esm/components/calendar/utils.d.ts +8 -0
  68. package/dist/esm/components/calendar/utils.js +16 -1
  69. package/dist/esm/components/calendar/utils.js.map +1 -1
  70. package/dist/esm/components/card/CCard.js +1 -1
  71. package/dist/esm/components/dropdown/CDropdownToggle.js +2 -2
  72. package/dist/esm/components/form/CFormControlWrapper.d.ts +2 -0
  73. package/dist/esm/components/form/CFormControlWrapper.js +9 -1
  74. package/dist/esm/components/form/CFormControlWrapper.js.map +1 -1
  75. package/dist/esm/components/index.d.ts +2 -0
  76. package/dist/esm/components/index.js +4 -0
  77. package/dist/esm/components/index.js.map +1 -1
  78. package/dist/esm/components/link/CLink.js.map +1 -1
  79. package/dist/esm/components/loading-button/CLoadingButton.d.ts +2 -2
  80. package/dist/esm/components/multi-select/CMultiSelect.d.ts +12 -0
  81. package/dist/esm/components/multi-select/CMultiSelect.js +24 -2
  82. package/dist/esm/components/multi-select/CMultiSelect.js.map +1 -1
  83. package/dist/esm/components/nav/CNav.d.ts +2 -2
  84. package/dist/esm/components/nav/CNav.js +3 -2
  85. package/dist/esm/components/nav/CNav.js.map +1 -1
  86. package/dist/esm/components/offcanvas/COffcanvas.js.map +1 -1
  87. package/dist/esm/components/password-input/CPasswordInput.d.ts +190 -0
  88. package/dist/esm/components/password-input/CPasswordInput.js +176 -0
  89. package/dist/esm/components/password-input/CPasswordInput.js.map +1 -0
  90. package/dist/esm/components/password-input/index.d.ts +6 -0
  91. package/dist/esm/components/password-input/index.js +10 -0
  92. package/dist/esm/components/password-input/index.js.map +1 -0
  93. package/dist/esm/components/popover/CPopover.d.ts +1 -1
  94. package/dist/esm/components/rating/CRating.d.ts +1 -1
  95. package/dist/esm/components/smart-table/CSmartTable.js +2 -2
  96. package/dist/esm/components/smart-table/CSmartTable.js.map +1 -1
  97. package/dist/esm/components/smart-table/CSmartTableBody.js +1 -1
  98. package/dist/esm/components/smart-table/utils.js.map +1 -1
  99. package/dist/esm/components/stepper/CStepper.d.ts +168 -0
  100. package/dist/esm/components/stepper/CStepper.js +303 -0
  101. package/dist/esm/components/stepper/CStepper.js.map +1 -0
  102. package/dist/esm/components/stepper/index.d.ts +6 -0
  103. package/dist/esm/components/stepper/index.js +10 -0
  104. package/dist/esm/components/stepper/index.js.map +1 -0
  105. package/dist/esm/components/stepper/types.d.ts +15 -0
  106. package/dist/esm/components/tabs/CTab.js.map +1 -1
  107. package/dist/esm/components/tabs/CTabList.d.ts +2 -2
  108. package/dist/esm/components/tabs/CTabList.js +3 -2
  109. package/dist/esm/components/tabs/CTabList.js.map +1 -1
  110. package/dist/esm/components/time-picker/utils.d.ts +10 -0
  111. package/dist/esm/components/time-picker/utils.js +25 -10
  112. package/dist/esm/components/time-picker/utils.js.map +1 -1
  113. package/dist/esm/components/tooltip/CTooltip.d.ts +1 -1
  114. package/dist/esm/components/widgets/CWidgetStatsB.js +2 -2
  115. package/dist/esm/components/widgets/CWidgetStatsB.js.map +1 -1
  116. package/dist/esm/components/widgets/CWidgetStatsC.js +2 -2
  117. package/dist/esm/components/widgets/CWidgetStatsC.js.map +1 -1
  118. package/dist/esm/index.js +4 -0
  119. package/dist/esm/index.js.map +1 -1
  120. package/dist/esm/node_modules/vue-types/dist/index.js +541 -0
  121. package/dist/esm/node_modules/vue-types/dist/index.js.map +1 -0
  122. package/dist/esm/node_modules/vue-types/dist/shared/vue-types.8139b772.js +25 -0
  123. package/dist/esm/node_modules/vue-types/dist/shared/vue-types.8139b772.js.map +1 -0
  124. package/dist/esm/utils/getNextActiveElement.js.map +1 -1
  125. package/package.json +9 -9
  126. package/src/components/button/CButton.ts +1 -1
  127. package/src/components/calendar/CCalendar.ts +47 -44
  128. package/src/components/calendar/utils.ts +33 -10
  129. package/src/components/form/CFormControlWrapper.ts +35 -21
  130. package/src/components/index.ts +2 -0
  131. package/src/components/multi-select/CMultiSelect.ts +48 -25
  132. package/src/components/nav/CNav.ts +3 -2
  133. package/src/components/password-input/CPasswordInput.ts +214 -0
  134. package/src/components/password-input/index.ts +10 -0
  135. package/src/components/stepper/CStepper.ts +384 -0
  136. package/src/components/stepper/__tests__/CStepper.spec.ts +175 -0
  137. package/src/components/stepper/index.ts +10 -0
  138. package/src/components/stepper/types.ts +18 -0
  139. package/src/components/tabs/CTabList.ts +3 -2
  140. package/src/components/time-picker/CTimePicker.ts +22 -22
  141. package/src/components/time-picker/CTimePickerRollCol.ts +3 -3
  142. package/src/components/time-picker/utils.ts +30 -13
  143. package/dist/cjs/node_modules/is-plain-object/dist/is-plain-object.js +0 -37
  144. package/dist/cjs/node_modules/is-plain-object/dist/is-plain-object.js.map +0 -1
  145. package/dist/cjs/node_modules/vue-types/dist/vue-types.modern.js +0 -33
  146. package/dist/cjs/node_modules/vue-types/dist/vue-types.modern.js.map +0 -1
  147. package/dist/esm/node_modules/is-plain-object/dist/is-plain-object.js +0 -35
  148. package/dist/esm/node_modules/is-plain-object/dist/is-plain-object.js.map +0 -1
  149. package/dist/esm/node_modules/vue-types/dist/vue-types.modern.js +0 -6
  150. package/dist/esm/node_modules/vue-types/dist/vue-types.modern.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coreui/vue-pro",
3
- "version": "5.10.0",
3
+ "version": "5.11.0",
4
4
  "description": "UI Components Library for Vue.js",
5
5
  "keywords": [
6
6
  "vue",
@@ -41,12 +41,12 @@
41
41
  "test:update": "jest --coverage --updateSnapshot"
42
42
  },
43
43
  "dependencies": {
44
- "@coreui/coreui-pro": "^5.8.0",
44
+ "@coreui/coreui-pro": "^5.14.0",
45
45
  "@popperjs/core": "^2.11.8"
46
46
  },
47
47
  "devDependencies": {
48
- "@rollup/plugin-commonjs": "^28.0.2",
49
- "@rollup/plugin-node-resolve": "^16.0.0",
48
+ "@rollup/plugin-commonjs": "^28.0.3",
49
+ "@rollup/plugin-node-resolve": "^16.0.1",
50
50
  "@rollup/plugin-typescript": "^12.1.2",
51
51
  "@types/jest": "^29.5.14",
52
52
  "@vue/test-utils": "^2.4.6",
@@ -54,12 +54,12 @@
54
54
  "cross-env": "^7.0.3",
55
55
  "jest": "^29.7.0",
56
56
  "jest-environment-jsdom": "^29.7.0",
57
- "rollup": "^4.30.1",
57
+ "rollup": "^4.41.1",
58
58
  "rollup-plugin-vue": "^6.0.0",
59
- "ts-jest": "^29.2.5",
60
- "typescript": "^5.7.2",
61
- "vue": "^3.5.13",
62
- "vue-types": "^5.1.3"
59
+ "ts-jest": "^29.3.4",
60
+ "typescript": "^5.8.3",
61
+ "vue": "^3.5.16",
62
+ "vue-types": "^6.0.0"
63
63
  },
64
64
  "peerDependencies": {
65
65
  "vue": "^3.5.0"
@@ -93,9 +93,9 @@ export const CButton = defineComponent({
93
93
  {
94
94
  class: [
95
95
  'btn',
96
+ props.variant && props.color ? `btn-${props.variant}-${props.color}` : `btn-${props.variant}`,
96
97
  {
97
98
  [`btn-${props.color}`]: props.color && !props.variant,
98
- [`btn-${props.variant}-${props.color}`]: props.color && props.variant,
99
99
  [`btn-${props.size}`]: props.size,
100
100
  active: props.active,
101
101
  disabled: props.disabled,
@@ -23,6 +23,7 @@ import {
23
23
  isYearInRange,
24
24
  isYearSelected,
25
25
  getSelectableDates,
26
+ setTimeFromDate,
26
27
  } from './utils'
27
28
 
28
29
  import type { DisabledDate, SelectionTypes, ViewTypes } from './types'
@@ -256,20 +257,20 @@ const CCalendar = defineComponent({
256
257
  ? convertToDateObject(props.calendarDate, props.selectionType)
257
258
  : props.startDate
258
259
  ? convertToDateObject(props.startDate, props.selectionType)
259
- : new Date(),
260
+ : new Date()
260
261
  )
261
262
  const startDate = ref<Date | null>(
262
- props.startDate ? convertToDateObject(props.startDate, props.selectionType) : null,
263
+ props.startDate ? convertToDateObject(props.startDate, props.selectionType) : null
263
264
  )
264
265
  const endDate = ref(
265
- props.endDate ? convertToDateObject(props.endDate, props.selectionType) : null,
266
+ props.endDate ? convertToDateObject(props.endDate, props.selectionType) : null
266
267
  )
267
268
  const hoverDate = ref<Date | null>(null)
268
269
  const maxDate = ref(
269
- props.maxDate ? convertToDateObject(props.maxDate, props.selectionType) : null,
270
+ props.maxDate ? convertToDateObject(props.maxDate, props.selectionType) : null
270
271
  )
271
272
  const minDate = ref(
272
- props.minDate ? convertToDateObject(props.minDate, props.selectionType) : null,
273
+ props.minDate ? convertToDateObject(props.minDate, props.selectionType) : null
273
274
  )
274
275
  const selectEndDate = ref(props.selectEndDate)
275
276
  const view = ref<ViewTypes>('days')
@@ -286,7 +287,7 @@ const CCalendar = defineComponent({
286
287
 
287
288
  view.value = (viewMap[props.selectionType] as ViewTypes) || 'days'
288
289
  },
289
- { immediate: true },
290
+ { immediate: true }
290
291
  )
291
292
 
292
293
  watch(
@@ -295,7 +296,7 @@ const CCalendar = defineComponent({
295
296
  if (props.calendarDate) {
296
297
  calendarDate.value = new Date(props.calendarDate)
297
298
  }
298
- },
299
+ }
299
300
  )
300
301
 
301
302
  watch(
@@ -307,7 +308,7 @@ const CCalendar = defineComponent({
307
308
  if (!isSameDateAs(date, startDate.value)) {
308
309
  startDate.value = date
309
310
  }
310
- },
311
+ }
311
312
  )
312
313
 
313
314
  watch(
@@ -317,7 +318,7 @@ const CCalendar = defineComponent({
317
318
  if (!isSameDateAs(date, endDate.value)) {
318
319
  endDate.value = date
319
320
  }
320
- },
321
+ }
321
322
  )
322
323
 
323
324
  watch(
@@ -326,7 +327,7 @@ const CCalendar = defineComponent({
326
327
  maxDate.value = props.maxDate
327
328
  ? convertToDateObject(props.maxDate, props.selectionType)
328
329
  : null
329
- },
330
+ }
330
331
  )
331
332
 
332
333
  watch(
@@ -335,14 +336,14 @@ const CCalendar = defineComponent({
335
336
  minDate.value = props.minDate
336
337
  ? convertToDateObject(props.minDate, props.selectionType)
337
338
  : null
338
- },
339
+ }
339
340
  )
340
341
 
341
342
  watch(
342
343
  () => props.selectEndDate,
343
344
  () => {
344
345
  selectEndDate.value = props.selectEndDate
345
- },
346
+ }
346
347
  )
347
348
 
348
349
  watch(startDate, () => {
@@ -417,7 +418,7 @@ const CCalendar = defineComponent({
417
418
  return
418
419
  }
419
420
 
420
- endDate.value = date
421
+ endDate.value = setTimeFromDate(date, endDate.value)
421
422
  return
422
423
  }
423
424
 
@@ -434,11 +435,11 @@ const CCalendar = defineComponent({
434
435
  }
435
436
 
436
437
  selectEndDate.value = true
437
- startDate.value = date
438
+ startDate.value = setTimeFromDate(date, startDate.value)
438
439
  return
439
440
  }
440
441
 
441
- startDate.value = date
442
+ startDate.value = setTimeFromDate(date, startDate.value)
442
443
  }
443
444
 
444
445
  const handleCalendarKeyDown = (event: KeyboardEvent, date: Date, index?: number) => {
@@ -535,7 +536,7 @@ const CCalendar = defineComponent({
535
536
 
536
537
  setTimeout(() => {
537
538
  const _list: HTMLElement[] = getSelectableDates(
538
- element.parentNode?.parentNode as HTMLDivElement,
539
+ element.parentNode?.parentNode as HTMLDivElement
539
540
  )
540
541
 
541
542
  if (_list.length > 0 && event.key === 'ArrowRight') {
@@ -581,6 +582,8 @@ const CCalendar = defineComponent({
581
582
  return
582
583
  }
583
584
 
585
+ date = setTimeFromDate(date, selectEndDate.value ? endDate.value : startDate.value)
586
+
584
587
  hoverDate.value = date
585
588
  emit('date-hover', getDateBySelectionType(date, props.selectionType))
586
589
  }
@@ -626,7 +629,7 @@ const CCalendar = defineComponent({
626
629
  const monthDetails = getMonthDetails(
627
630
  _calendarDate.getFullYear(),
628
631
  _calendarDate.getMonth(),
629
- props.firstDayOfWeek,
632
+ props.firstDayOfWeek
630
633
  )
631
634
  const listOfMonths = createGroupsInArray(getMonthsNames(props.locale), 4)
632
635
  const listOfYears = createGroupsInArray(getYears(_calendarDate.getFullYear()), 4)
@@ -642,7 +645,7 @@ const CCalendar = defineComponent({
642
645
  h(
643
646
  'th',
644
647
  { class: 'calendar-cell' },
645
- h('div', { class: 'calendar-header-cell-inner' }, props.weekNumbersLabel),
648
+ h('div', { class: 'calendar-header-cell-inner' }, props.weekNumbersLabel)
646
649
  ),
647
650
  weekDays.map(({ date }: { date: Date }) => {
648
651
  return h(
@@ -664,11 +667,11 @@ const CCalendar = defineComponent({
664
667
  })
665
668
  : date
666
669
  .toLocaleDateString(props.locale, { weekday: 'long' })
667
- .slice(0, props.weekdayFormat),
668
- ),
670
+ .slice(0, props.weekdayFormat)
671
+ )
669
672
  )
670
673
  }),
671
- ]),
674
+ ])
672
675
  ),
673
676
  h('tbody', {}, [
674
677
  view.value === 'days' &&
@@ -677,13 +680,13 @@ const CCalendar = defineComponent({
677
680
  week.weekNumber === 0
678
681
  ? `${_calendarDate.getFullYear()}W53`
679
682
  : `${_calendarDate.getFullYear()}W${week.weekNumber}`,
680
- props.selectionType,
683
+ props.selectionType
681
684
  )
682
685
  const isDisabled = isDateDisabled(
683
686
  date,
684
687
  minDate.value,
685
688
  maxDate.value,
686
- props.disabledDates,
689
+ props.disabledDates
687
690
  )
688
691
  const isSelected = isDateSelected(date, startDate.value, endDate.value)
689
692
  const current = week.days.some((day) => day.month === 'current')
@@ -721,14 +724,14 @@ const CCalendar = defineComponent({
721
724
  h(
722
725
  'th',
723
726
  { class: 'calendar-cell-week-number' },
724
- week.weekNumber === 0 ? 53 : week.weekNumber,
727
+ week.weekNumber === 0 ? 53 : week.weekNumber
725
728
  ),
726
729
  week.days.map(({ date, month }: { date: Date; month: string }) => {
727
730
  const isDisabled = isDateDisabled(
728
731
  date,
729
732
  minDate.value,
730
733
  maxDate.value,
731
- props.disabledDates,
734
+ props.disabledDates
732
735
  )
733
736
  const isSelected = isDateSelected(date, startDate.value, endDate.value)
734
737
  return month === 'current' || props.showAdjacementDays
@@ -787,12 +790,12 @@ const CCalendar = defineComponent({
787
790
  ? props.dayFormat(date)
788
791
  : date.toLocaleDateString(props.locale, {
789
792
  day: <'numeric' | '2-digit'>props.dayFormat,
790
- }),
791
- ),
793
+ })
794
+ )
792
795
  )
793
796
  : h('td')
794
797
  }),
795
- ],
798
+ ]
796
799
  )
797
800
  }),
798
801
  view.value === 'months' &&
@@ -807,7 +810,7 @@ const CCalendar = defineComponent({
807
810
  date,
808
811
  minDate.value,
809
812
  maxDate.value,
810
- props.disabledDates,
813
+ props.disabledDates
811
814
  )
812
815
  const isSelected = isMonthSelected(date, startDate.value, endDate.value)
813
816
  return h(
@@ -837,9 +840,9 @@ const CCalendar = defineComponent({
837
840
  onMouseleave: () => handleCalendarMouseLeave(),
838
841
  }),
839
842
  },
840
- h('div', { class: 'calendar-cell-inner' }, month),
843
+ h('div', { class: 'calendar-cell-inner' }, month)
841
844
  )
842
- }),
845
+ })
843
846
  )
844
847
  }),
845
848
  view.value === 'years' &&
@@ -853,7 +856,7 @@ const CCalendar = defineComponent({
853
856
  date,
854
857
  minDate.value,
855
858
  maxDate.value,
856
- props.disabledDates,
859
+ props.disabledDates
857
860
  )
858
861
  const isSelected = isYearSelected(date, startDate.value, endDate.value)
859
862
  return h(
@@ -883,9 +886,9 @@ const CCalendar = defineComponent({
883
886
  onMouseleave: () => handleCalendarMouseLeave(),
884
887
  }),
885
888
  },
886
- h('div', { class: 'calendar-cell-inner' }, year),
889
+ h('div', { class: 'calendar-cell-inner' }, year)
887
890
  )
888
- }),
891
+ })
889
892
  )
890
893
  }),
891
894
  ]),
@@ -917,7 +920,7 @@ const CCalendar = defineComponent({
917
920
  slots.navPrevDoubleIcon
918
921
  ? slots.navPrevDoubleIcon()
919
922
  : h('span', { class: 'calendar-nav-icon calendar-nav-icon-double-prev' }),
920
- },
923
+ }
921
924
  ),
922
925
  view.value === 'days' &&
923
926
  h(
@@ -936,9 +939,9 @@ const CCalendar = defineComponent({
936
939
  slots.navPrevIcon
937
940
  ? slots.navPrevIcon()
938
941
  : h('span', { class: 'calendar-nav-icon calendar-nav-icon-prev' }),
939
- },
942
+ }
940
943
  ),
941
- ],
944
+ ]
942
945
  ),
943
946
  h(
944
947
  'div',
@@ -958,7 +961,7 @@ const CCalendar = defineComponent({
958
961
  if (props.navigation) view.value = 'months'
959
962
  },
960
963
  },
961
- () => _calendarDate.toLocaleDateString(props.locale, { month: 'long' }),
964
+ () => _calendarDate.toLocaleDateString(props.locale, { month: 'long' })
962
965
  ),
963
966
  h(
964
967
  CButton,
@@ -970,9 +973,9 @@ const CCalendar = defineComponent({
970
973
  },
971
974
  ...(props.navYearFirst && { style: { order: '-1' } }),
972
975
  },
973
- () => _calendarDate.toLocaleDateString(props.locale, { year: 'numeric' }),
976
+ () => _calendarDate.toLocaleDateString(props.locale, { year: 'numeric' })
974
977
  ),
975
- ],
978
+ ]
976
979
  ),
977
980
  props.navigation &&
978
981
  h(
@@ -998,7 +1001,7 @@ const CCalendar = defineComponent({
998
1001
  slots.navNextIcon
999
1002
  ? slots.navNextIcon()
1000
1003
  : h('span', { class: 'calendar-nav-icon calendar-nav-icon-next' }),
1001
- },
1004
+ }
1002
1005
  ),
1003
1006
  h(
1004
1007
  CButton,
@@ -1016,9 +1019,9 @@ const CCalendar = defineComponent({
1016
1019
  slots.navNextDoubleIcon
1017
1020
  ? slots.navNextDoubleIcon()
1018
1021
  : h('span', { class: 'calendar-nav-icon calendar-nav-icon-double-next' }),
1019
- },
1022
+ }
1020
1023
  ),
1021
- ],
1024
+ ]
1022
1025
  ),
1023
1026
  ])
1024
1027
  }
@@ -1044,7 +1047,7 @@ const CCalendar = defineComponent({
1044
1047
  Calendar(_calendarDate),
1045
1048
  ])
1046
1049
  }),
1047
- ],
1050
+ ]
1048
1051
  )
1049
1052
  },
1050
1053
  })
@@ -80,7 +80,7 @@ export const getCalendarDate = (calendarDate: Date, order: number, view: ViewTyp
80
80
  */
81
81
  export const getDateBySelectionType = (
82
82
  date: Date | null,
83
- selectionType: SelectionTypes,
83
+ selectionType: SelectionTypes
84
84
  ): string | Date | null => {
85
85
  if (date === null) {
86
86
  return null
@@ -116,7 +116,7 @@ export const getFirstAvailableDateInRange = (
116
116
  endDate: Date,
117
117
  min?: Date | null,
118
118
  max?: Date | null,
119
- disabledDates?: DisabledDate | DisabledDate[],
119
+ disabledDates?: DisabledDate | DisabledDate[]
120
120
  ): Date | null => {
121
121
  const _min = min ? new Date(Math.max(startDate.getTime(), min.getTime())) : startDate
122
122
  const _max = max ? new Date(Math.min(endDate.getTime(), max.getTime())) : endDate
@@ -158,7 +158,7 @@ export const getMonthsNames = (locale: string, format: 'short' | 'long' = 'short
158
158
  */
159
159
  export const getSelectableDates = (
160
160
  element: HTMLElement,
161
- selector: string = 'tr[tabindex="0"], td[tabindex="0"]',
161
+ selector: string = 'tr[tabindex="0"], td[tabindex="0"]'
162
162
  ) => {
163
163
  return [...Element.prototype.querySelectorAll.call(element, selector)] as HTMLElement[]
164
164
  }
@@ -183,7 +183,7 @@ export const getYears = (year: number, range: number = 6): number[] => {
183
183
  const getLeadingDays = (
184
184
  year: number,
185
185
  month: number,
186
- firstDayOfWeek: number,
186
+ firstDayOfWeek: number
187
187
  ): { date: Date; month: string }[] => {
188
188
  // 0: sunday
189
189
  // 1: monday
@@ -239,7 +239,7 @@ const getTrailingDays = (
239
239
  year: number,
240
240
  month: number,
241
241
  leadingDays: { date: Date; month: string }[],
242
- monthDays: { date: Date; month: string }[],
242
+ monthDays: { date: Date; month: string }[]
243
243
  ) => {
244
244
  const dates = []
245
245
  const days = 42 - (leadingDays.length + monthDays.length)
@@ -283,7 +283,7 @@ export const getWeekNumber = (date: Date): number => {
283
283
  export const getMonthDetails = (
284
284
  year: number,
285
285
  month: number,
286
- firstDayOfWeek: number,
286
+ firstDayOfWeek: number
287
287
  ): { weekNumber?: number; days: { date: Date; month: string }[] }[] => {
288
288
  const daysPrevMonth = getLeadingDays(year, month, firstDayOfWeek)
289
289
  const daysThisMonth = getMonthDays(year, month)
@@ -320,7 +320,7 @@ export const isDateDisabled = (
320
320
  date: Date,
321
321
  min?: Date | null,
322
322
  max?: Date | null,
323
- disabledDates?: DisabledDate | DisabledDate[],
323
+ disabledDates?: DisabledDate | DisabledDate[]
324
324
  ): boolean => {
325
325
  if (min && date < min) {
326
326
  return true
@@ -405,7 +405,7 @@ export const isDateSelected = (date: Date, start: Date | null, end: Date | null)
405
405
  export const isDisableDateInRange = (
406
406
  startDate?: Date | null,
407
407
  endDate?: Date | null,
408
- disabledDates?: DisabledDate | DisabledDate[],
408
+ disabledDates?: DisabledDate | DisabledDate[]
409
409
  ): boolean => {
410
410
  if (startDate && endDate) {
411
411
  const date = new Date(startDate)
@@ -437,7 +437,7 @@ export const isMonthDisabled = (
437
437
  date: Date,
438
438
  min?: Date | null,
439
439
  max?: Date | null,
440
- disabledDates?: DisabledDate | DisabledDate[],
440
+ disabledDates?: DisabledDate | DisabledDate[]
441
441
  ) => {
442
442
  const current = date.getFullYear() * 12 + date.getMonth()
443
443
  const _min = min ? min.getFullYear() * 12 + min.getMonth() : null
@@ -556,7 +556,7 @@ export const isYearDisabled = (
556
556
  date: Date,
557
557
  min?: Date | null,
558
558
  max?: Date | null,
559
- disabledDates?: DisabledDate | DisabledDate[],
559
+ disabledDates?: DisabledDate | DisabledDate[]
560
560
  ) => {
561
561
  const year = date.getFullYear()
562
562
  const minYear = min ? min.getFullYear() : null
@@ -638,3 +638,26 @@ export const removeTimeFromDate = (date: Date): Date => {
638
638
  clearedDate.setHours(0, 0, 0, 0)
639
639
  return clearedDate
640
640
  }
641
+
642
+ /**
643
+ * Copies the time (hours, minutes, seconds, milliseconds) from one Date to another.
644
+ *
645
+ * @param {Date} target - The date whose time will be updated.
646
+ * @param {Date | null} source - The date to copy the time from.
647
+ * @returns {Date} A new Date instance with the date from `target` and time from `source`.
648
+ */
649
+ export const setTimeFromDate = (target: Date, source: Date | null): Date => {
650
+ if (!(source instanceof Date)) {
651
+ return target
652
+ }
653
+
654
+ const result = new Date(target) // create a copy to avoid mutation
655
+ result.setHours(
656
+ source.getHours(),
657
+ source.getMinutes(),
658
+ source.getSeconds(),
659
+ source.getMilliseconds()
660
+ )
661
+
662
+ return result
663
+ }
@@ -7,6 +7,7 @@ import { CFormText } from './CFormText'
7
7
  import type { ComponentProps } from '../../utils/ComponentProps'
8
8
 
9
9
  interface CFormControlWrapperProps extends ComponentProps<typeof CFormControlValidation> {
10
+ floatingClassName?: string
10
11
  floatingLabel?: string
11
12
  id?: string
12
13
  label?: string
@@ -18,6 +19,12 @@ const CFormControlWrapper = defineComponent({
18
19
  inheritAttrs: false,
19
20
  props: {
20
21
  ...CFormControlValidation.props,
22
+ /**
23
+ * A string of all className you want applied to the floating label wrapper.
24
+ *
25
+ * @since 5.5.0
26
+ */
27
+ floatingClassName: String,
21
28
  /**
22
29
  * Provide valuable, actionable valid feedback when using standard HTML form validation which applied two CSS pseudo-classes, `:invalid` and `:valid`.
23
30
  *
@@ -64,34 +71,41 @@ const CFormControlWrapper = defineComponent({
64
71
  ...(slots.feedbackValid && {
65
72
  feedbackValid: () => slots.feedbackInvalid && slots.feedbackInvalid(),
66
73
  }),
67
- },
74
+ }
68
75
  )
69
76
 
70
77
  return () =>
71
78
  props.floatingLabel
72
- ? h(CFormFloating, () => [
73
- slots.default && slots.default(),
74
- h(
75
- CFormLabel,
76
- {
77
- for: props.id,
78
- },
79
- {
80
- default: () => (slots.label && slots.label()) || props.label || props.floatingLabel,
81
- },
82
- ),
83
- (props.text || slots.text) &&
79
+ ? h(
80
+ CFormFloating,
81
+ {
82
+ class: props.floatingClassName,
83
+ },
84
+ () => [
85
+ slots.default && slots.default(),
84
86
  h(
85
- CFormText,
87
+ CFormLabel,
86
88
  {
87
- id: props.describedby,
89
+ for: props.id,
88
90
  },
89
91
  {
90
- default: () => (slots.text && slots.text()) || props.text,
91
- },
92
+ default: () =>
93
+ (slots.label && slots.label()) || props.label || props.floatingLabel,
94
+ }
92
95
  ),
93
- formControlValidation(),
94
- ])
96
+ (props.text || slots.text) &&
97
+ h(
98
+ CFormText,
99
+ {
100
+ id: props.describedby,
101
+ },
102
+ {
103
+ default: () => (slots.text && slots.text()) || props.text,
104
+ }
105
+ ),
106
+ formControlValidation(),
107
+ ]
108
+ )
95
109
  : [
96
110
  (props.label || slots.label) &&
97
111
  h(
@@ -101,7 +115,7 @@ const CFormControlWrapper = defineComponent({
101
115
  },
102
116
  {
103
117
  default: () => (slots.label && slots.label()) || props.label,
104
- },
118
+ }
105
119
  ),
106
120
  slots.default && slots.default(),
107
121
  (props.text || slots.text) &&
@@ -112,7 +126,7 @@ const CFormControlWrapper = defineComponent({
112
126
  },
113
127
  {
114
128
  default: () => (slots.text && slots.text()) || props.text,
115
- },
129
+ }
116
130
  ),
117
131
  formControlValidation(),
118
132
  ]
@@ -30,6 +30,7 @@ export * from './multi-select'
30
30
  export * from './nav'
31
31
  export * from './navbar'
32
32
  export * from './offcanvas'
33
+ export * from './password-input'
33
34
  export * from './pagination'
34
35
  export * from './picker'
35
36
  export * from './placeholder'
@@ -41,6 +42,7 @@ export * from './sidebar'
41
42
  export * from './smart-pagination'
42
43
  export * from './smart-table'
43
44
  export * from './spinner'
45
+ export * from './stepper'
44
46
  export * from './table'
45
47
  export * from './tabs'
46
48
  export * from './time-picker'