@coreui/vue-pro 4.3.0 → 4.4.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 (146) hide show
  1. package/README.md +113 -5
  2. package/dist/components/accordion/CAccordion.d.ts +1 -1
  3. package/dist/components/accordion/CAccordionBody.d.ts +1 -1
  4. package/dist/components/accordion/CAccordionButton.d.ts +1 -1
  5. package/dist/components/accordion/CAccordionHeader.d.ts +1 -1
  6. package/dist/components/accordion/CAccordionItem.d.ts +1 -1
  7. package/dist/components/accordion/index.d.ts +1 -2
  8. package/dist/components/alert/CAlertHeading.d.ts +1 -1
  9. package/dist/components/alert/CAlertLink.d.ts +1 -1
  10. package/dist/components/avatar/CAvatar.d.ts +1 -1
  11. package/dist/components/backdrop/CBackdrop.d.ts +1 -1
  12. package/dist/components/badge/CBadge.d.ts +1 -1
  13. package/dist/components/breadcrumb/CBreadcrumb.d.ts +1 -1
  14. package/dist/components/breadcrumb/CBreadcrumbItem.d.ts +1 -1
  15. package/dist/components/button-group/CButtonGroup.d.ts +1 -1
  16. package/dist/components/button-group/CButtonToolbar.d.ts +1 -1
  17. package/dist/components/callout/CCallout.d.ts +1 -1
  18. package/dist/components/card/CCard.d.ts +1 -1
  19. package/dist/components/card/CCardBody.d.ts +1 -1
  20. package/dist/components/card/CCardFooter.d.ts +1 -1
  21. package/dist/components/card/CCardGroup.d.ts +1 -1
  22. package/dist/components/card/CCardHeader.d.ts +1 -1
  23. package/dist/components/card/CCardImage.d.ts +1 -1
  24. package/dist/components/card/CCardImageOverlay.d.ts +1 -1
  25. package/dist/components/card/CCardLink.d.ts +1 -1
  26. package/dist/components/card/CCardSubtitle.d.ts +1 -1
  27. package/dist/components/card/CCardText.d.ts +1 -1
  28. package/dist/components/card/CCardTitle.d.ts +1 -1
  29. package/dist/components/carousel/CCarousel.d.ts +1 -1
  30. package/dist/components/carousel/CCarouselCaption.d.ts +1 -1
  31. package/dist/components/carousel/CCarouselItem.d.ts +1 -1
  32. package/dist/components/date-picker/CDatePicker.d.ts +18 -2
  33. package/dist/components/date-range-picker/CDateRangePicker.d.ts +23 -2
  34. package/dist/components/dropdown/CDropdown.d.ts +2 -2
  35. package/dist/components/dropdown/CDropdownDivider.d.ts +1 -1
  36. package/dist/components/dropdown/CDropdownHeader.d.ts +1 -1
  37. package/dist/components/dropdown/CDropdownItem.d.ts +1 -1
  38. package/dist/components/dropdown/CDropdownMenu.d.ts +1 -1
  39. package/dist/components/dropdown/CDropdownToggle.d.ts +1 -1
  40. package/dist/components/element-cover/CElementCover.d.ts +1 -1
  41. package/dist/components/footer/CFooter.d.ts +1 -1
  42. package/dist/components/form/CForm.d.ts +1 -1
  43. package/dist/components/form/CFormControl.d.ts +1 -1
  44. package/dist/components/form/CFormControlValidation.d.ts +1 -1
  45. package/dist/components/form/CFormControlWrapper.d.ts +1 -1
  46. package/dist/components/form/CFormFeedback.d.ts +1 -1
  47. package/dist/components/form/CFormFloating.d.ts +1 -1
  48. package/dist/components/form/CFormInput.d.ts +9 -3
  49. package/dist/components/form/CFormLabel.d.ts +1 -1
  50. package/dist/components/form/CFormText.d.ts +1 -1
  51. package/dist/components/form/CInputGroup.d.ts +1 -1
  52. package/dist/components/form/CInputGroupText.d.ts +1 -1
  53. package/dist/components/grid/CCol.d.ts +1 -1
  54. package/dist/components/grid/CContainer.d.ts +1 -1
  55. package/dist/components/grid/CRow.d.ts +1 -1
  56. package/dist/components/header/CHeader.d.ts +1 -1
  57. package/dist/components/header/CHeaderBrand.d.ts +1 -1
  58. package/dist/components/header/CHeaderDivider.d.ts +1 -1
  59. package/dist/components/header/CHeaderNav.d.ts +1 -1
  60. package/dist/components/header/CHeaderText.d.ts +1 -1
  61. package/dist/components/header/CHeaderToggler.d.ts +1 -1
  62. package/dist/components/image/CImage.d.ts +1 -1
  63. package/dist/components/list-group/CListGroup.d.ts +1 -1
  64. package/dist/components/list-group/CListGroupItem.d.ts +1 -1
  65. package/dist/components/modal/CModalBody.d.ts +1 -1
  66. package/dist/components/modal/CModalFooter.d.ts +1 -1
  67. package/dist/components/modal/CModalHeader.d.ts +1 -1
  68. package/dist/components/modal/CModalTitle.d.ts +1 -1
  69. package/dist/components/nav/CNav.d.ts +1 -1
  70. package/dist/components/nav/CNavGroupItems.d.ts +1 -1
  71. package/dist/components/nav/CNavItem.d.ts +1 -1
  72. package/dist/components/nav/CNavLink.d.ts +1 -1
  73. package/dist/components/nav/CNavTitle.d.ts +1 -1
  74. package/dist/components/navbar/CNavbar.d.ts +1 -1
  75. package/dist/components/navbar/CNavbarBrand.d.ts +1 -1
  76. package/dist/components/navbar/CNavbarNav.d.ts +1 -1
  77. package/dist/components/navbar/CNavbarText.d.ts +1 -1
  78. package/dist/components/navbar/CNavbarToggler.d.ts +1 -1
  79. package/dist/components/offcanvas/COffcanvasBody.d.ts +1 -1
  80. package/dist/components/offcanvas/COffcanvasHeader.d.ts +1 -1
  81. package/dist/components/offcanvas/COffcanvasTitle.d.ts +1 -1
  82. package/dist/components/pagination/CPagination.d.ts +1 -1
  83. package/dist/components/pagination/CPaginationItem.d.ts +1 -1
  84. package/dist/components/placeholder/CPlaceholder.d.ts +1 -1
  85. package/dist/components/progress/CProgress.d.ts +1 -1
  86. package/dist/components/progress/CProgressBar.d.ts +1 -1
  87. package/dist/components/sidebar/CSidebarBrand.d.ts +1 -1
  88. package/dist/components/sidebar/CSidebarFooter.d.ts +1 -1
  89. package/dist/components/sidebar/CSidebarHeader.d.ts +1 -1
  90. package/dist/components/sidebar/CSidebarNav.d.ts +1 -1
  91. package/dist/components/sidebar/CSidebarToggler.d.ts +1 -1
  92. package/dist/components/spinner/CSpinner.d.ts +1 -1
  93. package/dist/components/table/CTable.d.ts +20 -1
  94. package/dist/components/table/CTableBody.d.ts +1 -1
  95. package/dist/components/table/CTableCaption.d.ts +1 -1
  96. package/dist/components/table/CTableDataCell.d.ts +1 -1
  97. package/dist/components/table/CTableFoot.d.ts +1 -1
  98. package/dist/components/table/CTableHead.d.ts +1 -1
  99. package/dist/components/table/CTableHeaderCell.d.ts +1 -1
  100. package/dist/components/table/CTableRow.d.ts +1 -1
  101. package/dist/components/tabs/CTabContent.d.ts +1 -1
  102. package/dist/components/toast/CToastBody.d.ts +1 -1
  103. package/dist/components/toast/CToaster.d.ts +1 -1
  104. package/dist/components/widgets/CWidgetStatsA.d.ts +1 -1
  105. package/dist/components/widgets/CWidgetStatsB.d.ts +1 -1
  106. package/dist/components/widgets/CWidgetStatsC.d.ts +1 -1
  107. package/dist/components/widgets/CWidgetStatsD.d.ts +1 -1
  108. package/dist/components/widgets/CWidgetStatsE.d.ts +1 -1
  109. package/dist/components/widgets/CWidgetStatsF.d.ts +1 -1
  110. package/dist/directives/v-c-popover.d.ts +1 -1
  111. package/dist/directives/v-c-tooltip.d.ts +1 -1
  112. package/dist/index.es.js +4952 -1662
  113. package/dist/index.es.js.map +1 -1
  114. package/dist/index.js +4951 -1662
  115. package/dist/index.js.map +1 -1
  116. package/dist/utils/calendar.d.ts +3 -3
  117. package/package.json +13 -13
  118. package/src/components/accordion/index.ts +0 -3
  119. package/src/components/close-button/CCloseButton.ts +1 -0
  120. package/src/components/close-button/__tests__/__snapshots__/CCloseButton.spec.ts.snap +2 -2
  121. package/src/components/date-picker/CDatePicker.ts +11 -1
  122. package/src/components/date-range-picker/CDateRangePicker.ts +20 -1
  123. package/src/components/dropdown/CDropdown.ts +18 -3
  124. package/src/components/form/CFormCheck.ts +8 -10
  125. package/src/components/form/CFormControlWrapper.ts +1 -1
  126. package/src/components/form/CFormInput.ts +2 -1
  127. package/src/components/form/CFormSelect.ts +1 -0
  128. package/src/components/form/CFormTextarea.ts +8 -0
  129. package/src/components/form/__tests__/CFormInput.spec.ts +11 -11
  130. package/src/components/form/__tests__/CFormRange.spec.ts +9 -9
  131. package/src/components/form/__tests__/CFormSelect.spec.ts +4 -4
  132. package/src/components/form/__tests__/CFormTextarea.spec.ts +4 -4
  133. package/src/components/form/__tests__/__snapshots__/CFormCheck.spec.ts.snap +8 -2
  134. package/src/components/form/__tests__/__snapshots__/CFormRange.spec.ts.snap +1 -1
  135. package/src/components/modal/CModal.ts +4 -0
  136. package/src/components/modal/__tests__/__snapshots__/CModal.spec.ts.snap +1 -2
  137. package/src/components/modal/__tests__/__snapshots__/CModalHeader.spec.ts.snap +2 -2
  138. package/src/components/sidebar/CSidebar.ts +2 -3
  139. package/src/components/sidebar/__tests__/__snapshots__/CSidebar.spec.ts.snap +2 -8
  140. package/src/components/table/CTable.ts +10 -0
  141. package/src/components/time-picker/CTimePicker.ts +1 -0
  142. package/src/components/toast/__tests__/__snapshots__/CToastClose.spec.ts.snap +1 -1
  143. package/src/components/toast/__tests__/__snapshots__/CToastHeader.spec.ts.snap +1 -1
  144. package/src/directives/v-c-popover.ts +1 -1
  145. package/src/directives/v-c-tooltip.ts +1 -1
  146. package/src/components/accordion/CAccordionCollapse.ts +0 -28
@@ -3,7 +3,7 @@ export declare const convertToLocalTime: (d: Date, locale: string, options?: {})
3
3
  export declare const createGroupsInArray: (arr: any[], numberOfGroups: number) => any[][];
4
4
  export declare const getCurrentYear: () => number;
5
5
  export declare const getCurrentMonth: () => number;
6
- export declare const getLocalDateFromString: (string: string, locale: string, time?: boolean | undefined) => Date | undefined;
6
+ export declare const getLocalDateFromString: (string: string, locale: string, time?: boolean) => Date | undefined;
7
7
  export declare const getMonthName: (month: number, locale: string) => string;
8
8
  export declare const getMonthsNames: (locale: string) => string[];
9
9
  export declare const getYears: (year: number) => number[];
@@ -11,8 +11,8 @@ export declare const getMonthDetails: (year: number, month: number, firstDayOfWe
11
11
  date: Date;
12
12
  month: string;
13
13
  }[][];
14
- export declare const isDisableDateInRange: (startDate?: Date | null | undefined, endDate?: Date | null | undefined, dates?: Date[] | Date[][] | undefined) => boolean;
15
- export declare const isDateDisabled: (date: Date, min?: Date | null | undefined, max?: Date | null | undefined, dates?: Date[] | Date[][] | undefined) => boolean | undefined;
14
+ export declare const isDisableDateInRange: (startDate?: Date | null, endDate?: Date | null, dates?: Date[] | Date[][]) => boolean;
15
+ export declare const isDateDisabled: (date: Date, min?: Date | null, max?: Date | null, dates?: Date[] | Date[][]) => boolean | undefined;
16
16
  export declare const isDateInRange: (date: Date, start: Date | null, end: Date | null) => boolean | null;
17
17
  export declare const isDateSelected: (date: Date, start: Date | null, end: Date | null) => boolean | null;
18
18
  export declare const isEndDate: (date: Date, start: Date | null, end: Date | null) => boolean | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coreui/vue-pro",
3
- "version": "4.3.0",
3
+ "version": "4.4.0",
4
4
  "description": "UI Components Library for Vue.js",
5
5
  "keywords": [
6
6
  "vue",
@@ -35,23 +35,23 @@
35
35
  "watch": "rollup -c -w"
36
36
  },
37
37
  "config": {
38
- "version_short": "4.2"
38
+ "version_short": "4.4"
39
39
  },
40
40
  "devDependencies": {
41
- "@popperjs/core": "^2.11.5",
42
- "@rollup/plugin-commonjs": "^21.1.0",
43
- "@rollup/plugin-node-resolve": "^13.2.1",
44
- "@rollup/plugin-typescript": "^8.3.2",
45
- "@vue/test-utils": "^2.0.0-rc.20",
46
- "date-fns": "^2.28.0",
47
- "rollup": "^2.70.2",
41
+ "@popperjs/core": "^2.11.6",
42
+ "@rollup/plugin-commonjs": "^22.0.2",
43
+ "@rollup/plugin-node-resolve": "^13.3.0",
44
+ "@rollup/plugin-typescript": "^8.5.0",
45
+ "@vue/test-utils": "^2.0.2",
46
+ "date-fns": "^2.29.3",
47
+ "rollup": "^2.79.0",
48
48
  "rollup-plugin-vue": "^6.0.0",
49
- "typescript": "^4.6.3",
50
- "vue": "^3.2.33",
51
- "vue-types": "^4.1.1"
49
+ "typescript": "^4.8.3",
50
+ "vue": "^3.2.39",
51
+ "vue-types": "^4.2.1"
52
52
  },
53
53
  "peerDependencies": {
54
- "@coreui/coreui-pro": "^4.2.0",
54
+ "@coreui/coreui-pro": "^4.3.4",
55
55
  "vue": "^3.2.21"
56
56
  },
57
57
  "standard": {
@@ -2,7 +2,6 @@ import { App } from 'vue'
2
2
  import { CAccordion } from './CAccordion'
3
3
  import { CAccordionBody } from './CAccordionBody'
4
4
  import { CAccordionButton } from './CAccordionButton'
5
- import { CAccordionCollapse } from './CAccordionCollapse'
6
5
  import { CAccordionHeader } from './CAccordionHeader'
7
6
  import { CAccordionItem } from './CAccordionItem'
8
7
 
@@ -11,7 +10,6 @@ const CAccordionPlugin = {
11
10
  app.component(CAccordion.name, CAccordion)
12
11
  app.component(CAccordionBody.name, CAccordionBody)
13
12
  app.component(CAccordionButton.name, CAccordionButton)
14
- app.component(CAccordionCollapse.name, CAccordionCollapse)
15
13
  app.component(CAccordionHeader.name, CAccordionHeader)
16
14
  app.component(CAccordionItem.name, CAccordionItem)
17
15
  },
@@ -22,7 +20,6 @@ export {
22
20
  CAccordion,
23
21
  CAccordionBody,
24
22
  CAccordionButton,
25
- CAccordionCollapse,
26
23
  CAccordionHeader,
27
24
  CAccordionItem,
28
25
  }
@@ -34,6 +34,7 @@ export const CCloseButton = defineComponent({
34
34
  }
35
35
  return () =>
36
36
  h('button', {
37
+ type: 'button',
37
38
  class: [
38
39
  'btn',
39
40
  'btn-close',
@@ -1,5 +1,5 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`Customize CCloseButton component renders correctly 1`] = `"<button class=\\"btn btn-close btn-close-white\\" aria-label=\\"Close\\" disabled=\\"\\"></button>"`;
3
+ exports[`Customize CCloseButton component renders correctly 1`] = `"<button type=\\"button\\" class=\\"btn btn-close btn-close-white\\" aria-label=\\"Close\\" disabled=\\"\\"></button>"`;
4
4
 
5
- exports[`Loads and display CCloseButton component renders correctly 1`] = `"<button class=\\"btn btn-close\\" aria-label=\\"Close\\"></button>"`;
5
+ exports[`Loads and display CCloseButton component renders correctly 1`] = `"<button type=\\"button\\" class=\\"btn btn-close\\" aria-label=\\"Close\\"></button>"`;
@@ -139,6 +139,13 @@ const CDatePicker = defineComponent({
139
139
  * Toggle visibility of footer element or set the content of footer.
140
140
  */
141
141
  footer: Boolean,
142
+ /**
143
+ * The id global attribute defines an identifier (ID) that must be unique in the whole document.
144
+ *
145
+ * The name attribute for the input element is generated based on the `id` property:
146
+ * - {id}-date
147
+ */
148
+ id: String,
142
149
  /**
143
150
  * Toggle visibility or set the content of the input indicator.
144
151
  */
@@ -218,9 +225,12 @@ const CDatePicker = defineComponent({
218
225
  },
219
226
  },
220
227
  },
221
- emit: [
228
+ emits: [
222
229
  /**
223
230
  * Callback fired when the date changed.
231
+ *
232
+ * @property {Date} date - date object
233
+ * @property {string} formatedDate - formated date
224
234
  */
225
235
  'date-change',
226
236
  ],
@@ -154,6 +154,14 @@ const CDateRangePicker = defineComponent({
154
154
  * Toggle visibility of footer element or set the content of footer.
155
155
  */
156
156
  footer: Boolean,
157
+ /**
158
+ * The id global attribute defines an identifier (ID) that must be unique in the whole document.
159
+ *
160
+ * The name attributes for input elements are generated based on the `id` property:
161
+ * - {id}-start-date
162
+ * - {id}-end-date
163
+ */
164
+ id: String,
157
165
  /**
158
166
  * Toggle visibility or set the content of the input indicator.
159
167
  */
@@ -300,9 +308,12 @@ const CDateRangePicker = defineComponent({
300
308
  },
301
309
  },
302
310
  },
303
- emit: [
311
+ emits: [
304
312
  /**
305
313
  * Callback fired when the end date changed.
314
+ *
315
+ * @property {Date} date - date object
316
+ * @property {string} formatedDate - formated date
306
317
  */
307
318
  'end-date-change',
308
319
  /**
@@ -315,6 +326,9 @@ const CDateRangePicker = defineComponent({
315
326
  'show',
316
327
  /**
317
328
  * Callback fired when the start date changed.
329
+ *
330
+ * @property {Date} date - date object
331
+ * @property {string} formatedDate - formated date
318
332
  */
319
333
  'start-date-change',
320
334
  ],
@@ -450,10 +464,12 @@ const CDateRangePicker = defineComponent({
450
464
  },
451
465
  () => [
452
466
  h(CFormInput, {
467
+ autocomplete: 'off',
453
468
  class: {
454
469
  hover: inputStartHoverValue.value,
455
470
  },
456
471
  disabled: props.disabled,
472
+ ...(props.id && { name: props.range ? `${props.id}-start-date` : `${props.id}-date` }),
457
473
  onClick: () => {
458
474
  selectEndDate.value = false
459
475
  },
@@ -485,10 +501,12 @@ const CDateRangePicker = defineComponent({
485
501
  ),
486
502
  props.range &&
487
503
  h(CFormInput, {
504
+ autocomplete: 'off',
488
505
  class: {
489
506
  hover: inputEndHoverValue.value,
490
507
  },
491
508
  disabled: props.disabled,
509
+ ...(props.id && { name: `${props.id}-end-date` }),
492
510
  onClick: () => {
493
511
  selectEndDate.value = true
494
512
  },
@@ -552,6 +570,7 @@ const CDateRangePicker = defineComponent({
552
570
  confirmButtonVariant: props.confirmButtonVariant,
553
571
  disabled: props.disabled,
554
572
  footer: props.footer || props.timepicker,
573
+ id: props.id,
555
574
  onCancel: () => {
556
575
  startDate.value = initialStartDate.value
557
576
  endDate.value = initialEndDate.value
@@ -64,14 +64,14 @@ const CDropdown = defineComponent({
64
64
  /**
65
65
  * Sets a specified direction and location of the dropdown menu.
66
66
  *
67
- * @values 'dropup', 'dropend', 'dropstart'
67
+ * @values 'center', 'dropup', 'dropup-center', 'dropend', 'dropstart'
68
68
  */
69
69
  direction: {
70
70
  type: String,
71
71
  default: undefined,
72
72
  required: false,
73
73
  validator: (value: string) => {
74
- return ['dropup', 'dropend', 'dropstart'].includes(value)
74
+ return ['center', 'dropup', 'dropup-center', 'dropend', 'dropstart'].includes(value)
75
75
  },
76
76
  },
77
77
  /**
@@ -164,15 +164,26 @@ const CDropdown = defineComponent({
164
164
  provide('dropdownToggleRef', dropdownToggleRef)
165
165
  provide('dropdownMenuRef', dropdownMenuRef)
166
166
 
167
+ if (props.direction === 'center') {
168
+ placement.value = 'bottom'
169
+ }
170
+
167
171
  if (props.direction === 'dropup') {
168
172
  placement.value = 'top-start'
169
173
  }
174
+
175
+ if (props.direction === 'dropup-center') {
176
+ placement.value = 'top'
177
+ }
178
+
170
179
  if (props.direction === 'dropend') {
171
180
  placement.value = 'right-start'
172
181
  }
182
+
173
183
  if (props.direction === 'dropstart') {
174
184
  placement.value = 'left-start'
175
185
  }
186
+
176
187
  if (props.alignment === 'end') {
177
188
  placement.value = 'bottom-end'
178
189
  }
@@ -240,7 +251,11 @@ const CDropdown = defineComponent({
240
251
  {
241
252
  class: [
242
253
  props.variant === 'nav-item' ? 'nav-item dropdown' : props.variant,
243
- props.direction,
254
+ props.direction === 'center'
255
+ ? 'dropdown-center'
256
+ : props.direction === 'dropup-center'
257
+ ? 'dropup dropup-center'
258
+ : props.direction,
244
259
  ],
245
260
  },
246
261
  slots.default && slots.default(),
@@ -132,16 +132,14 @@ const CFormCheck = defineComponent({
132
132
  attrs.class,
133
133
  ]
134
134
 
135
- const inputClassName = props.button
136
- ? 'btn-check'
137
- : [
138
- 'form-check-input',
139
- {
140
- 'is-invalid': props.invalid,
141
- 'is-valid': props.valid,
142
- 'me-2': props.hitArea,
143
- },
144
- ]
135
+ const inputClassName = [
136
+ props.button ? 'btn-check' : 'form-check-input',
137
+ {
138
+ 'is-invalid': props.invalid,
139
+ 'is-valid': props.valid,
140
+ 'me-2': props.hitArea,
141
+ },
142
+ ]
145
143
 
146
144
  const formControl = () => {
147
145
  return h('input', {
@@ -43,7 +43,7 @@ const CFormControlWrapper = defineComponent({
43
43
  setup(props, { slots }) {
44
44
  return () =>
45
45
  props.floatingLabel
46
- ? h(CFormFloating, [
46
+ ? h(CFormFloating, () => [
47
47
  slots.default && slots.default(),
48
48
  h(
49
49
  CFormLabel,
@@ -67,7 +67,7 @@ const CFormInput = defineComponent({
67
67
  * The default name for a value passed using v-model.
68
68
  */
69
69
  modelValue: {
70
- type: String,
70
+ type: [File, Number, String],
71
71
  default: undefined,
72
72
  },
73
73
  /**
@@ -171,6 +171,7 @@ const CFormInput = defineComponent({
171
171
  h(
172
172
  'input',
173
173
  {
174
+ id: props.id,
174
175
  ...attrs,
175
176
  class: [
176
177
  props.plainText ? 'form-control-plaintext' : 'form-control',
@@ -165,6 +165,7 @@ const CFormSelect = defineComponent({
165
165
  h(
166
166
  'select',
167
167
  {
168
+ id: props.id,
168
169
  ...attrs,
169
170
  class: [
170
171
  'form-select',
@@ -113,6 +113,12 @@ const CFormTextarea = defineComponent({
113
113
  'update:modelValue',
114
114
  ],
115
115
  setup(props, { attrs, emit, slots }) {
116
+ const handleChange = (event: InputEvent) => {
117
+ const target = event.target as HTMLInputElement
118
+ emit('change', event)
119
+ emit('update:modelValue', target.value)
120
+ }
121
+
116
122
  const handleInput = (event: InputEvent) => {
117
123
  const target = event.target as HTMLInputElement
118
124
  emit('input', event)
@@ -140,6 +146,7 @@ const CFormTextarea = defineComponent({
140
146
  h(
141
147
  'textarea',
142
148
  {
149
+ id: props.id,
143
150
  ...attrs,
144
151
  disabled: props.disabled,
145
152
  readonly: props.readonly,
@@ -150,6 +157,7 @@ const CFormTextarea = defineComponent({
150
157
  'is-valid': props.valid,
151
158
  },
152
159
  ],
160
+ onChange: (event: InputEvent) => handleChange(event),
153
161
  onInput: (event: InputEvent) => handleInput(event),
154
162
  ...(props.modelValue && { value: props.modelValue }),
155
163
  },
@@ -49,7 +49,7 @@ describe(`Loads and display ${ComponentName} component`, () => {
49
49
  })
50
50
  it('contain slots and classes', () => {
51
51
  expect(defaultWrapper.text()).toContain('Default slot')
52
- expect(defaultWrapper.classes('form-control')).toBe(true)
52
+ expect(defaultWrapper.find('input').classes('form-control')).toBe(true)
53
53
  })
54
54
  })
55
55
 
@@ -59,11 +59,11 @@ describe(`Customize ${ComponentName} component`, () => {
59
59
  })
60
60
  it('contain slots and classes', () => {
61
61
  expect(customWrapper.text()).toContain('Default slot')
62
- expect(customWrapper.classes('form-control-plaintext')).toBe(true)
63
- expect(customWrapper.classes('form-control-color')).toBe(true)
64
- expect(customWrapper.classes('form-control-lg')).toBe(true)
65
- expect(customWrapper.classes('is-invalid')).toBe(true)
66
- expect(customWrapper.classes('is-valid')).toBe(true)
62
+ expect(customWrapper.find('input').classes('form-control-plaintext')).toBe(true)
63
+ expect(customWrapper.find('input').classes('form-control-color')).toBe(true)
64
+ expect(customWrapper.find('input').classes('form-control-lg')).toBe(true)
65
+ expect(customWrapper.find('input').classes('is-invalid')).toBe(true)
66
+ expect(customWrapper.find('input').classes('is-valid')).toBe(true)
67
67
  })
68
68
  })
69
69
 
@@ -73,10 +73,10 @@ describe(`Customize (two) ${ComponentName} component`, () => {
73
73
  })
74
74
  it('contain slots and classes', () => {
75
75
  expect(customWrapperTwo.text()).toContain('Default slot')
76
- expect(customWrapperTwo.classes('form-control')).toBe(true)
77
- expect(customWrapper.classes('form-control-color')).toBe(true)
78
- expect(customWrapper.classes('form-control-lg')).toBe(true)
79
- expect(customWrapper.classes('is-invalid')).toBe(true)
80
- expect(customWrapper.classes('is-valid')).toBe(true)
76
+ expect(customWrapperTwo.find('input').classes('form-control')).toBe(true)
77
+ expect(customWrapper.find('input').classes('form-control-color')).toBe(true)
78
+ expect(customWrapper.find('input').classes('form-control-lg')).toBe(true)
79
+ expect(customWrapper.find('input').classes('is-invalid')).toBe(true)
80
+ expect(customWrapper.find('input').classes('is-valid')).toBe(true)
81
81
  })
82
82
  })
@@ -33,8 +33,8 @@ describe(`Loads and display ${ComponentName} component`, () => {
33
33
  })
34
34
  it('contain slots and classes', () => {
35
35
  expect(defaultWrapper.text()).toContain('Default slot')
36
- expect(defaultWrapper.classes('form-range')).toBe(true)
37
- expect(defaultWrapper.attributes('type')).toBe('range')
36
+ expect(defaultWrapper.find('input').classes('form-range')).toBe(true)
37
+ expect(defaultWrapper.find('input').attributes('type')).toBe('range')
38
38
  })
39
39
  })
40
40
 
@@ -44,12 +44,12 @@ describe(`Customize ${ComponentName} component`, () => {
44
44
  })
45
45
  it('contain slots and classes', () => {
46
46
  expect(customWrapper.text()).toContain('Default slot')
47
- expect(customWrapper.classes('form-range')).toBe(true)
48
- expect(customWrapper.attributes('type')).toBe('range')
49
- expect(customWrapper.attributes('disabled')).toBe('')
50
- expect(customWrapper.attributes('max')).toBe('400')
51
- expect(customWrapper.attributes('min')).toBe('50')
52
- expect(customWrapper.attributes('readonly')).toBe('')
53
- expect(customWrapper.attributes('steps')).toBe('10')
47
+ expect(customWrapper.find('input').classes('form-range')).toBe(true)
48
+ expect(customWrapper.find('input').attributes('type')).toBe('range')
49
+ expect(customWrapper.find('input').attributes('disabled')).toBe('')
50
+ expect(customWrapper.find('input').attributes('max')).toBe('400')
51
+ expect(customWrapper.find('input').attributes('min')).toBe('50')
52
+ expect(customWrapper.find('input').attributes('readonly')).toBe('')
53
+ expect(customWrapper.find('input').attributes('steps')).toBe('10')
54
54
  })
55
55
  })
@@ -31,7 +31,7 @@ describe(`Loads and display ${ComponentName} component`, () => {
31
31
  })
32
32
  it('contain slots and classes', () => {
33
33
  expect(defaultWrapper.text()).toContain('Default slot')
34
- expect(defaultWrapper.classes('form-select')).toBe(true)
34
+ expect(defaultWrapper.find('select').classes('form-select')).toBe(true)
35
35
  })
36
36
  })
37
37
 
@@ -41,8 +41,8 @@ describe(`Customize ${ComponentName} component`, () => {
41
41
  })
42
42
  it('contain slots and classes', () => {
43
43
  expect(customWrapper.text()).toContain('Default slot')
44
- expect(customWrapper.classes('form-select')).toBe(true)
45
- expect(customWrapper.classes('form-select-lg')).toBe(true)
46
- expect(customWrapper.attributes('size')).toBe('200')
44
+ expect(customWrapper.find('select').classes('form-select')).toBe(true)
45
+ expect(customWrapper.find('select').classes('form-select-lg')).toBe(true)
46
+ expect(customWrapper.find('select').attributes('size')).toBe('200')
47
47
  })
48
48
  })
@@ -32,7 +32,7 @@ describe(`Loads and display ${ComponentName} component`, () => {
32
32
  })
33
33
  it('contain slots and classes', () => {
34
34
  expect(defaultWrapper.text()).toContain('Default slot')
35
- expect(defaultWrapper.classes('form-control')).toBe(true)
35
+ expect(defaultWrapper.find('textarea').classes('form-control')).toBe(true)
36
36
  })
37
37
  })
38
38
 
@@ -42,8 +42,8 @@ describe(`Customize ${ComponentName} component`, () => {
42
42
  })
43
43
  it('contain slots and classes', () => {
44
44
  expect(customWrapper.text()).toContain('Default slot')
45
- expect(customWrapper.classes('form-control-plaintext')).toBe(true)
46
- expect(customWrapper.classes('is-invalid')).toBe(true)
47
- expect(customWrapper.classes('is-valid')).toBe(true)
45
+ expect(customWrapper.find('textarea').classes('form-control-plaintext')).toBe(true)
46
+ expect(customWrapper.find('textarea').classes('is-invalid')).toBe(true)
47
+ expect(customWrapper.find('textarea').classes('is-valid')).toBe(true)
48
48
  })
49
49
  })
@@ -1,7 +1,13 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`Customize with label - CFormCheck component renders correctly 1`] = `"<input class=\\"btn-check is-invalid is-valid\\" id=\\"uniqueid\\" type=\\"checkbox\\"><label class=\\"btn btn-outline-warning btn-lg rounded-circle\\" for=\\"uniqueid\\">some label</label>"`;
3
+ exports[`Customize with label - CFormCheck component renders correctly 1`] = `
4
+ "<input class=\\"btn-check is-invalid is-valid\\" id=\\"uniqueid\\" type=\\"checkbox\\">
5
+ <label class=\\"btn btn-outline-warning btn-lg rounded-circle\\" disabled=\\"false\\" for=\\"uniqueid\\">some label</label>"
6
+ `;
4
7
 
5
- exports[`Customize with label in slot - CFormCheck component renders correctly 1`] = `"<input class=\\"btn-check is-invalid is-valid\\" id=\\"uniqueid\\" type=\\"checkbox\\"><label class=\\"btn btn-outline-warning btn-lg rounded-circle\\" for=\\"uniqueid\\">some label</label>"`;
8
+ exports[`Customize with label in slot - CFormCheck component renders correctly 1`] = `
9
+ "<input class=\\"btn-check is-invalid is-valid\\" id=\\"uniqueid\\" type=\\"checkbox\\">
10
+ <label class=\\"btn btn-outline-warning btn-lg rounded-circle\\" disabled=\\"false\\" for=\\"uniqueid\\">some label</label>"
11
+ `;
6
12
 
7
13
  exports[`Loads and display CFormCheck component renders correctly 1`] = `"<input class=\\"form-check-input\\" type=\\"checkbox\\">"`;
@@ -1,5 +1,5 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`Customize CFormRange component renders correctly 1`] = `"<input class=\\"form-range\\" disabled=\\"\\" max=\\"400\\" min=\\"50\\" steps=\\"10\\" readonly=\\"\\" type=\\"range\\">"`;
3
+ exports[`Customize CFormRange component renders correctly 1`] = `"<input class=\\"form-range\\" disabled=\\"\\" max=\\"400\\" min=\\"50\\" readonly=\\"\\" steps=\\"10\\" type=\\"range\\">"`;
4
4
 
5
5
  exports[`Loads and display CFormRange component renders correctly 1`] = `"<input class=\\"form-range\\" type=\\"range\\">"`;
@@ -145,6 +145,8 @@ const CModal = defineComponent({
145
145
  const handleEnter = (el: RendererElement, done: () => void) => {
146
146
  executeAfterTransition(() => done(), el as HTMLElement)
147
147
  document.body.classList.add('modal-open')
148
+ document.body.style.overflow = 'hidden'
149
+ document.body.style.paddingRight = '0px'
148
150
  el.style.display = 'block'
149
151
  setTimeout(() => {
150
152
  el.classList.add('show')
@@ -160,6 +162,8 @@ const CModal = defineComponent({
160
162
  const handleLeave = (el: RendererElement, done: () => void) => {
161
163
  executeAfterTransition(() => done(), el as HTMLElement)
162
164
  document.body.classList.remove('modal-open')
165
+ document.body.style.removeProperty('overflow')
166
+ document.body.style.removeProperty('padding-right')
163
167
  if (document.body.className === '') {
164
168
  document.body.removeAttribute('class')
165
169
  }
@@ -7,8 +7,7 @@ exports[`Customize CModal component renders correctly 1`] = `
7
7
  <div class=\\"modal-content bazinga\\">Default slot</div>
8
8
  </div>
9
9
  </div>
10
- </transition-stub>
11
- <!---->"
10
+ </transition-stub>"
12
11
  `;
13
12
 
14
13
  exports[`Loads and display CModal component renders correctly 1`] = `
@@ -1,5 +1,5 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`Customize CModalHeader component renders correctly 1`] = `"<span class=\\"modal-header\\">Default slot<button class=\\"btn btn-close\\" aria-label=\\"Close\\"></button></span>"`;
3
+ exports[`Customize CModalHeader component renders correctly 1`] = `"<span class=\\"modal-header\\">Default slot<button type=\\"button\\" class=\\"btn btn-close\\" aria-label=\\"Close\\"></button></span>"`;
4
4
 
5
- exports[`Loads and display CModalHeader component renders correctly 1`] = `"<span class=\\"modal-header\\">Default slot<button class=\\"btn btn-close\\" aria-label=\\"Close\\"></button></span>"`;
5
+ exports[`Loads and display CModalHeader component renders correctly 1`] = `"<span class=\\"modal-header\\">Default slot<button type=\\"button\\" class=\\"btn btn-close\\" aria-label=\\"Close\\"></button></span>"`;
@@ -144,6 +144,7 @@ const CSidebar = defineComponent({
144
144
 
145
145
  const handleHide = () => {
146
146
  visible.value = false
147
+ emit('visible-change', false)
147
148
  }
148
149
 
149
150
  const handleResize = () => {
@@ -198,9 +199,7 @@ const CSidebar = defineComponent({
198
199
  h(CBackdrop, {
199
200
  class: 'sidebar-backdrop d-none',
200
201
  visible: props.visible,
201
- onClick: () => {
202
- visible.value = false
203
- },
202
+ onClick: () => handleHide(),
204
203
  }),
205
204
  ]
206
205
  },
@@ -1,11 +1,5 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`Customize CSidebar component renders correctly 1`] = `
4
- "<div class=\\"sidebar sidebar-narrow sidebar-overlaid sidebar-fixed sidebar-xl sidebar-narrow-unfoldable\\">Default slot</div>
5
- <!---->"
6
- `;
3
+ exports[`Customize CSidebar component renders correctly 1`] = `"<div class=\\"sidebar sidebar-narrow sidebar-overlaid sidebar-fixed sidebar-xl sidebar-narrow-unfoldable\\">Default slot</div>"`;
7
4
 
8
- exports[`Loads and display CSidebar component renders correctly 1`] = `
9
- "<div class=\\"sidebar hide\\">Default slot</div>
10
- <!---->"
11
- `;
5
+ exports[`Loads and display CSidebar component renders correctly 1`] = `"<div class=\\"sidebar hide\\">Default slot</div>"`;
@@ -97,6 +97,15 @@ const CTable = defineComponent({
97
97
  type: Boolean,
98
98
  required: false,
99
99
  },
100
+ /**
101
+ * Add zebra-striping to any table column.
102
+ *
103
+ * @since 4.4.0
104
+ */
105
+ stripedColumns: {
106
+ type: Boolean,
107
+ required: false,
108
+ },
100
109
  },
101
110
  setup(props, { slots, attrs }) {
102
111
  const table = () =>
@@ -115,6 +124,7 @@ const CTable = defineComponent({
115
124
  'table-hover': props.hover,
116
125
  'table-sm': props.small,
117
126
  'table-striped': props.striped,
127
+ 'table-striped-columns': props.stripedColumns,
118
128
  },
119
129
  attrs.class,
120
130
  ],
@@ -238,6 +238,7 @@ const CTimePicker = defineComponent({
238
238
  const InputGroup = () =>
239
239
  h(CInputGroup, { class: 'picker-input-group', size: props.size }, () => [
240
240
  h(CFormInput, {
241
+ autocomplete: 'off',
241
242
  disabled: props.disabled,
242
243
  onInput: (event) => {
243
244
  if (isValidTime(event.target.value)) {
@@ -2,4 +2,4 @@
2
2
 
3
3
  exports[`Customize CToastClose component renders correctly 1`] = `"<button class=\\"btn btn-undefined\\" type=\\"button\\">Default slot</button>"`;
4
4
 
5
- exports[`Loads and display CToastClose component renders correctly 1`] = `"<button class=\\"btn btn-close\\" aria-label=\\"Close\\"></button>"`;
5
+ exports[`Loads and display CToastClose component renders correctly 1`] = `"<button type=\\"button\\" class=\\"btn btn-close\\" aria-label=\\"Close\\"></button>"`;
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`Customize CToastHeader component renders correctly 1`] = `"<div class=\\"toast-header\\">Default slot<button class=\\"btn btn-close\\" aria-label=\\"Close\\"></button></div>"`;
3
+ exports[`Customize CToastHeader component renders correctly 1`] = `"<div class=\\"toast-header\\">Default slot<button type=\\"button\\" class=\\"btn btn-close\\" aria-label=\\"Close\\"></button></div>"`;
4
4
 
5
5
  exports[`Loads and display CToastHeader component renders correctly 1`] = `
6
6
  "<div class=\\"toast-header\\">Default slot
@@ -96,7 +96,7 @@ export default {
96
96
  })
97
97
  }
98
98
  },
99
- unmounted(binding: DirectiveBinding): void {
99
+ unmounted(_el: HTMLElement, binding: DirectiveBinding): void {
100
100
  const popover = binding.arg && document.getElementById(binding.arg)
101
101
  popover && popover.remove()
102
102
  },
@@ -92,7 +92,7 @@ export default {
92
92
  })
93
93
  }
94
94
  },
95
- beforeUnmount(binding: DirectiveBinding): void {
95
+ beforeUnmount(_el: HTMLElement, binding: DirectiveBinding): void {
96
96
  const tooltip = binding.arg && document.getElementById(binding.arg)
97
97
  tooltip && tooltip.remove()
98
98
  },