@coreui/vue-pro 5.12.0 → 5.13.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 (592) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/Types.d.ts +5 -0
  3. package/dist/cjs/components/accordion/CAccordion.js.map +1 -1
  4. package/dist/cjs/components/accordion/CAccordionBody.js.map +1 -1
  5. package/dist/cjs/components/accordion/CAccordionButton.js.map +1 -1
  6. package/dist/cjs/components/accordion/CAccordionHeader.js.map +1 -1
  7. package/dist/cjs/components/accordion/CAccordionItem.js.map +1 -1
  8. package/dist/cjs/components/accordion/index.js.map +1 -1
  9. package/dist/cjs/components/alert/CAlert.js.map +1 -1
  10. package/dist/cjs/components/alert/CAlertHeading.js.map +1 -1
  11. package/dist/cjs/components/alert/CAlertLink.js.map +1 -1
  12. package/dist/cjs/components/alert/index.js.map +1 -1
  13. package/dist/cjs/components/autocomplete/CAutocomplete.d.ts +594 -0
  14. package/dist/cjs/components/autocomplete/CAutocomplete.js +724 -0
  15. package/dist/cjs/components/autocomplete/CAutocomplete.js.map +1 -0
  16. package/dist/cjs/components/autocomplete/CAutocompleteOptions.d.ts +50 -0
  17. package/dist/cjs/components/autocomplete/CAutocompleteOptions.js +116 -0
  18. package/dist/cjs/components/autocomplete/CAutocompleteOptions.js.map +1 -0
  19. package/dist/cjs/components/autocomplete/index.d.ts +6 -0
  20. package/dist/cjs/components/autocomplete/index.js +13 -0
  21. package/dist/cjs/components/autocomplete/index.js.map +1 -0
  22. package/dist/cjs/components/autocomplete/types.d.ts +18 -0
  23. package/dist/cjs/components/autocomplete/utils.d.ts +11 -0
  24. package/dist/cjs/components/autocomplete/utils.js +98 -0
  25. package/dist/cjs/components/autocomplete/utils.js.map +1 -0
  26. package/dist/cjs/components/avatar/CAvatar.js.map +1 -1
  27. package/dist/cjs/components/avatar/index.js.map +1 -1
  28. package/dist/cjs/components/backdrop/CBackdrop.js.map +1 -1
  29. package/dist/cjs/components/backdrop/index.js.map +1 -1
  30. package/dist/cjs/components/badge/CBadge.js.map +1 -1
  31. package/dist/cjs/components/badge/index.js.map +1 -1
  32. package/dist/cjs/components/breadcrumb/CBreadcrumb.js.map +1 -1
  33. package/dist/cjs/components/breadcrumb/CBreadcrumbItem.js.map +1 -1
  34. package/dist/cjs/components/breadcrumb/index.js.map +1 -1
  35. package/dist/cjs/components/button/CButton.js +2 -1
  36. package/dist/cjs/components/button/CButton.js.map +1 -1
  37. package/dist/cjs/components/button/index.js.map +1 -1
  38. package/dist/cjs/components/button-group/CButtonGroup.js.map +1 -1
  39. package/dist/cjs/components/button-group/CButtonToolbar.js.map +1 -1
  40. package/dist/cjs/components/button-group/index.js.map +1 -1
  41. package/dist/cjs/components/calendar/CCalendar.js +5 -7
  42. package/dist/cjs/components/calendar/CCalendar.js.map +1 -1
  43. package/dist/cjs/components/calendar/index.js.map +1 -1
  44. package/dist/cjs/components/calendar/utils.d.ts +19 -5
  45. package/dist/cjs/components/calendar/utils.js +20 -9
  46. package/dist/cjs/components/calendar/utils.js.map +1 -1
  47. package/dist/cjs/components/callout/CCallout.js.map +1 -1
  48. package/dist/cjs/components/callout/index.js.map +1 -1
  49. package/dist/cjs/components/card/CCard.js.map +1 -1
  50. package/dist/cjs/components/card/CCardBody.js.map +1 -1
  51. package/dist/cjs/components/card/CCardFooter.js.map +1 -1
  52. package/dist/cjs/components/card/CCardGroup.js.map +1 -1
  53. package/dist/cjs/components/card/CCardHeader.js.map +1 -1
  54. package/dist/cjs/components/card/CCardImage.js.map +1 -1
  55. package/dist/cjs/components/card/CCardImageOverlay.js.map +1 -1
  56. package/dist/cjs/components/card/CCardLink.js.map +1 -1
  57. package/dist/cjs/components/card/CCardSubtitle.js.map +1 -1
  58. package/dist/cjs/components/card/CCardText.js.map +1 -1
  59. package/dist/cjs/components/card/CCardTitle.js.map +1 -1
  60. package/dist/cjs/components/card/index.js.map +1 -1
  61. package/dist/cjs/components/carousel/CCarousel.js.map +1 -1
  62. package/dist/cjs/components/carousel/CCarouselCaption.js.map +1 -1
  63. package/dist/cjs/components/carousel/CCarouselItem.js.map +1 -1
  64. package/dist/cjs/components/carousel/index.js.map +1 -1
  65. package/dist/cjs/components/close-button/CCloseButton.js.map +1 -1
  66. package/dist/cjs/components/close-button/index.js.map +1 -1
  67. package/dist/cjs/components/collapse/CCollapse.js.map +1 -1
  68. package/dist/cjs/components/collapse/__test__/CCollapse.spec.d.ts +1 -0
  69. package/dist/cjs/components/collapse/index.js.map +1 -1
  70. package/dist/cjs/components/conditional-teleport/CConditionalTeleport.js.map +1 -1
  71. package/dist/cjs/components/conditional-teleport/index.js.map +1 -1
  72. package/dist/cjs/components/date-picker/CDatePicker.d.ts +4 -4
  73. package/dist/cjs/components/date-picker/CDatePicker.js.map +1 -1
  74. package/dist/cjs/components/date-picker/index.js.map +1 -1
  75. package/dist/cjs/components/date-range-picker/CDateRangePicker.d.ts +7 -7
  76. package/dist/cjs/components/date-range-picker/CDateRangePicker.js +10 -6
  77. package/dist/cjs/components/date-range-picker/CDateRangePicker.js.map +1 -1
  78. package/dist/cjs/components/date-range-picker/index.js.map +1 -1
  79. package/dist/cjs/components/date-range-picker/utils.js.map +1 -1
  80. package/dist/cjs/components/dropdown/CDropdown.d.ts +1 -1
  81. package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
  82. package/dist/cjs/components/dropdown/CDropdownDivider.js.map +1 -1
  83. package/dist/cjs/components/dropdown/CDropdownHeader.js.map +1 -1
  84. package/dist/cjs/components/dropdown/CDropdownItem.js.map +1 -1
  85. package/dist/cjs/components/dropdown/CDropdownMenu.js.map +1 -1
  86. package/dist/cjs/components/dropdown/CDropdownToggle.d.ts +1 -1
  87. package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
  88. package/dist/cjs/components/dropdown/index.js.map +1 -1
  89. package/dist/cjs/components/dropdown/utils.js.map +1 -1
  90. package/dist/cjs/components/element-cover/CElementCover.js.map +1 -1
  91. package/dist/cjs/components/element-cover/index.js.map +1 -1
  92. package/dist/cjs/components/footer/CFooter.js.map +1 -1
  93. package/dist/cjs/components/footer/index.js.map +1 -1
  94. package/dist/cjs/components/form/CForm.js.map +1 -1
  95. package/dist/cjs/components/form/CFormCheck.js.map +1 -1
  96. package/dist/cjs/components/form/CFormControlValidation.js.map +1 -1
  97. package/dist/cjs/components/form/CFormControlWrapper.js.map +1 -1
  98. package/dist/cjs/components/form/CFormFeedback.js.map +1 -1
  99. package/dist/cjs/components/form/CFormFloating.js.map +1 -1
  100. package/dist/cjs/components/form/CFormInput.js.map +1 -1
  101. package/dist/cjs/components/form/CFormLabel.js.map +1 -1
  102. package/dist/cjs/components/form/CFormRange.js.map +1 -1
  103. package/dist/cjs/components/form/CFormSelect.js.map +1 -1
  104. package/dist/cjs/components/form/CFormSwitch.js.map +1 -1
  105. package/dist/cjs/components/form/CFormText.js.map +1 -1
  106. package/dist/cjs/components/form/CFormTextarea.js.map +1 -1
  107. package/dist/cjs/components/form/CInputGroup.js.map +1 -1
  108. package/dist/cjs/components/form/CInputGroupText.js.map +1 -1
  109. package/dist/cjs/components/form/index.js.map +1 -1
  110. package/dist/cjs/components/grid/CCol.js.map +1 -1
  111. package/dist/cjs/components/grid/CContainer.d.ts +1 -1
  112. package/dist/cjs/components/grid/CContainer.js.map +1 -1
  113. package/dist/cjs/components/grid/CRow.js.map +1 -1
  114. package/dist/cjs/components/grid/index.js.map +1 -1
  115. package/dist/cjs/components/header/CHeader.js.map +1 -1
  116. package/dist/cjs/components/header/CHeaderBrand.js.map +1 -1
  117. package/dist/cjs/components/header/CHeaderDivider.js.map +1 -1
  118. package/dist/cjs/components/header/CHeaderNav.js.map +1 -1
  119. package/dist/cjs/components/header/CHeaderText.js.map +1 -1
  120. package/dist/cjs/components/header/CHeaderToggler.js.map +1 -1
  121. package/dist/cjs/components/header/index.js.map +1 -1
  122. package/dist/cjs/components/image/CImage.js.map +1 -1
  123. package/dist/cjs/components/image/index.js.map +1 -1
  124. package/dist/cjs/components/index.d.ts +1 -0
  125. package/dist/cjs/components/index.js +104 -100
  126. package/dist/cjs/components/index.js.map +1 -1
  127. package/dist/cjs/components/link/CLink.js.map +1 -1
  128. package/dist/cjs/components/link/index.js.map +1 -1
  129. package/dist/cjs/components/list-group/CListGroup.js.map +1 -1
  130. package/dist/cjs/components/list-group/CListGroupItem.js.map +1 -1
  131. package/dist/cjs/components/list-group/index.js.map +1 -1
  132. package/dist/cjs/components/loading-button/CLoadingButton.js.map +1 -1
  133. package/dist/cjs/components/loading-button/index.js.map +1 -1
  134. package/dist/cjs/components/modal/CModal.js.map +1 -1
  135. package/dist/cjs/components/modal/CModalBody.js.map +1 -1
  136. package/dist/cjs/components/modal/CModalFooter.js.map +1 -1
  137. package/dist/cjs/components/modal/CModalHeader.js.map +1 -1
  138. package/dist/cjs/components/modal/CModalTitle.js.map +1 -1
  139. package/dist/cjs/components/modal/index.js.map +1 -1
  140. package/dist/cjs/components/multi-select/CMultiSelect.d.ts +30 -11
  141. package/dist/cjs/components/multi-select/CMultiSelect.js +164 -143
  142. package/dist/cjs/components/multi-select/CMultiSelect.js.map +1 -1
  143. package/dist/cjs/components/multi-select/CMultiSelectNativeSelect.d.ts +1 -1
  144. package/dist/cjs/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
  145. package/dist/cjs/components/multi-select/CMultiSelectOptions.d.ts +2 -2
  146. package/dist/cjs/components/multi-select/CMultiSelectOptions.js +6 -3
  147. package/dist/cjs/components/multi-select/CMultiSelectOptions.js.map +1 -1
  148. package/dist/cjs/components/multi-select/CMultiSelectSelection.d.ts +1 -1
  149. package/dist/cjs/components/multi-select/CMultiSelectSelection.js.map +1 -1
  150. package/dist/cjs/components/multi-select/index.js.map +1 -1
  151. package/dist/cjs/components/multi-select/utils.d.ts +0 -2
  152. package/dist/cjs/components/multi-select/utils.js +0 -26
  153. package/dist/cjs/components/multi-select/utils.js.map +1 -1
  154. package/dist/cjs/components/nav/CNav.js.map +1 -1
  155. package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
  156. package/dist/cjs/components/nav/CNavGroupItems.js.map +1 -1
  157. package/dist/cjs/components/nav/CNavItem.js.map +1 -1
  158. package/dist/cjs/components/nav/CNavLink.js.map +1 -1
  159. package/dist/cjs/components/nav/CNavTitle.js.map +1 -1
  160. package/dist/cjs/components/nav/index.js.map +1 -1
  161. package/dist/cjs/components/navbar/CNavbar.js.map +1 -1
  162. package/dist/cjs/components/navbar/CNavbarBrand.js.map +1 -1
  163. package/dist/cjs/components/navbar/CNavbarNav.js.map +1 -1
  164. package/dist/cjs/components/navbar/CNavbarText.js.map +1 -1
  165. package/dist/cjs/components/navbar/CNavbarToggler.js.map +1 -1
  166. package/dist/cjs/components/navbar/index.js.map +1 -1
  167. package/dist/cjs/components/offcanvas/COffcanvas.js.map +1 -1
  168. package/dist/cjs/components/offcanvas/COffcanvasBody.js.map +1 -1
  169. package/dist/cjs/components/offcanvas/COffcanvasHeader.js.map +1 -1
  170. package/dist/cjs/components/offcanvas/COffcanvasTitle.js.map +1 -1
  171. package/dist/cjs/components/offcanvas/index.js.map +1 -1
  172. package/dist/cjs/components/pagination/CPagination.js.map +1 -1
  173. package/dist/cjs/components/pagination/CPaginationItem.js.map +1 -1
  174. package/dist/cjs/components/pagination/index.js.map +1 -1
  175. package/dist/cjs/components/password-input/CPasswordInput.js.map +1 -1
  176. package/dist/cjs/components/password-input/index.js.map +1 -1
  177. package/dist/cjs/components/picker/CPicker.js.map +1 -1
  178. package/dist/cjs/components/picker/index.js.map +1 -1
  179. package/dist/cjs/components/placeholder/CPlaceholder.js.map +1 -1
  180. package/dist/cjs/components/placeholder/index.js.map +1 -1
  181. package/dist/cjs/components/popover/CPopover.d.ts +1 -1
  182. package/dist/cjs/components/popover/CPopover.js.map +1 -1
  183. package/dist/cjs/components/popover/index.js.map +1 -1
  184. package/dist/cjs/components/progress/CProgress.js.map +1 -1
  185. package/dist/cjs/components/progress/CProgressBar.js.map +1 -1
  186. package/dist/cjs/components/progress/CProgressStacked.js.map +1 -1
  187. package/dist/cjs/components/progress/index.js.map +1 -1
  188. package/dist/cjs/components/props.js.map +1 -1
  189. package/dist/cjs/components/range-slider/CRangeSlider.js.map +1 -1
  190. package/dist/cjs/components/range-slider/index.js.map +1 -1
  191. package/dist/cjs/components/range-slider/utils.js.map +1 -1
  192. package/dist/cjs/components/rating/CRating.d.ts +1 -1
  193. package/dist/cjs/components/rating/CRating.js.map +1 -1
  194. package/dist/cjs/components/rating/index.js.map +1 -1
  195. package/dist/cjs/components/sidebar/CSidebar.d.ts +1 -1
  196. package/dist/cjs/components/sidebar/CSidebar.js.map +1 -1
  197. package/dist/cjs/components/sidebar/CSidebarBrand.js.map +1 -1
  198. package/dist/cjs/components/sidebar/CSidebarFooter.js.map +1 -1
  199. package/dist/cjs/components/sidebar/CSidebarHeader.js.map +1 -1
  200. package/dist/cjs/components/sidebar/CSidebarNav.js.map +1 -1
  201. package/dist/cjs/components/sidebar/CSidebarToggler.js.map +1 -1
  202. package/dist/cjs/components/sidebar/index.js.map +1 -1
  203. package/dist/cjs/components/smart-pagination/CSmartPagination.js.map +1 -1
  204. package/dist/cjs/components/smart-pagination/index.js.map +1 -1
  205. package/dist/cjs/components/smart-table/CSmartTable.d.ts +1 -1
  206. package/dist/cjs/components/smart-table/CSmartTable.js.map +1 -1
  207. package/dist/cjs/components/smart-table/CSmartTableBody.js.map +1 -1
  208. package/dist/cjs/components/smart-table/CSmartTableCleaner.d.ts +20 -0
  209. package/dist/cjs/components/smart-table/CSmartTableHead.js.map +1 -1
  210. package/dist/cjs/components/smart-table/CSmartTableInterface.d.ts +58 -0
  211. package/dist/cjs/components/smart-table/index.js.map +1 -1
  212. package/dist/cjs/components/smart-table/utils.js.map +1 -1
  213. package/dist/cjs/components/spinner/CSpinner.js.map +1 -1
  214. package/dist/cjs/components/spinner/index.js.map +1 -1
  215. package/dist/cjs/components/stepper/CStepper.js.map +1 -1
  216. package/dist/cjs/components/stepper/index.js.map +1 -1
  217. package/dist/cjs/components/table/CTable.js.map +1 -1
  218. package/dist/cjs/components/table/CTableBody.js.map +1 -1
  219. package/dist/cjs/components/table/CTableCaption.js.map +1 -1
  220. package/dist/cjs/components/table/CTableDataCell.js.map +1 -1
  221. package/dist/cjs/components/table/CTableFoot.js.map +1 -1
  222. package/dist/cjs/components/table/CTableHead.js.map +1 -1
  223. package/dist/cjs/components/table/CTableHeaderCell.js.map +1 -1
  224. package/dist/cjs/components/table/CTableRow.js.map +1 -1
  225. package/dist/cjs/components/table/index.js.map +1 -1
  226. package/dist/cjs/components/table/utils.js.map +1 -1
  227. package/dist/cjs/components/tabs/CTab.js.map +1 -1
  228. package/dist/cjs/components/tabs/CTabContent.js.map +1 -1
  229. package/dist/cjs/components/tabs/CTabList.js.map +1 -1
  230. package/dist/cjs/components/tabs/CTabPane.js.map +1 -1
  231. package/dist/cjs/components/tabs/CTabPanel.js.map +1 -1
  232. package/dist/cjs/components/tabs/CTabs.js.map +1 -1
  233. package/dist/cjs/components/tabs/index.js.map +1 -1
  234. package/dist/cjs/components/time-picker/CTimePicker.d.ts +5 -5
  235. package/dist/cjs/components/time-picker/CTimePicker.js +14 -1
  236. package/dist/cjs/components/time-picker/CTimePicker.js.map +1 -1
  237. package/dist/cjs/components/time-picker/CTimePickerRollCol.js.map +1 -1
  238. package/dist/cjs/components/time-picker/index.js.map +1 -1
  239. package/dist/cjs/components/time-picker/utils.js.map +1 -1
  240. package/dist/cjs/components/toast/CToast.js.map +1 -1
  241. package/dist/cjs/components/toast/CToastBody.js.map +1 -1
  242. package/dist/cjs/components/toast/CToastClose.js.map +1 -1
  243. package/dist/cjs/components/toast/CToastHeader.js.map +1 -1
  244. package/dist/cjs/components/toast/CToaster.js.map +1 -1
  245. package/dist/cjs/components/toast/index.js.map +1 -1
  246. package/dist/cjs/components/tooltip/CTooltip.d.ts +1 -1
  247. package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
  248. package/dist/cjs/components/tooltip/index.js.map +1 -1
  249. package/dist/cjs/components/virtual-scroller/CVirtualScroller.js.map +1 -1
  250. package/dist/cjs/components/virtual-scroller/index.js.map +1 -1
  251. package/dist/cjs/components/widgets/CWidgetStatsA.js.map +1 -1
  252. package/dist/cjs/components/widgets/CWidgetStatsB.js.map +1 -1
  253. package/dist/cjs/components/widgets/CWidgetStatsC.js.map +1 -1
  254. package/dist/cjs/components/widgets/CWidgetStatsD.js.map +1 -1
  255. package/dist/cjs/components/widgets/CWidgetStatsE.js.map +1 -1
  256. package/dist/cjs/components/widgets/CWidgetStatsF.js.map +1 -1
  257. package/dist/cjs/components/widgets/index.js.map +1 -1
  258. package/dist/cjs/composables/useColorModes.js.map +1 -1
  259. package/dist/cjs/composables/useDebouncedCallback.js.map +1 -1
  260. package/dist/cjs/composables/useDropdownWithPopper.js.map +1 -1
  261. package/dist/cjs/composables/useIsVisible.js.map +1 -1
  262. package/dist/cjs/composables/usePopper.js.map +1 -1
  263. package/dist/cjs/composables/useUniqueId.js.map +1 -1
  264. package/dist/cjs/directives/v-c-placeholder.js.map +1 -1
  265. package/dist/cjs/directives/v-c-popover.js.map +1 -1
  266. package/dist/cjs/directives/v-c-tooltip.js.map +1 -1
  267. package/dist/cjs/directives/v-c-visible.js.map +1 -1
  268. package/dist/cjs/index.js +110 -106
  269. package/dist/cjs/index.js.map +1 -1
  270. package/dist/cjs/node_modules/@coreui/icons-vue/dist/index.es.js.map +1 -1
  271. package/dist/cjs/node_modules/vue-types/dist/index.js.map +1 -1
  272. package/dist/cjs/node_modules/vue-types/dist/shared/vue-types.8139b772.js.map +1 -1
  273. package/dist/cjs/props.js.map +1 -1
  274. package/dist/cjs/utils/getNextActiveElement.js.map +1 -1
  275. package/dist/cjs/utils/getNextSibling.d.ts +2 -0
  276. package/dist/cjs/utils/getNextSibling.js +23 -0
  277. package/dist/cjs/utils/getNextSibling.js.map +1 -0
  278. package/dist/cjs/utils/getPreviousSibling.d.ts +2 -0
  279. package/dist/cjs/utils/getPreviousSibling.js +22 -0
  280. package/dist/cjs/utils/getPreviousSibling.js.map +1 -0
  281. package/dist/cjs/utils/getRTLPlacement.js.map +1 -1
  282. package/dist/cjs/utils/index.d.ts +3 -1
  283. package/dist/cjs/utils/isEqual.js.map +1 -1
  284. package/dist/cjs/utils/isObjectInArray.js.map +1 -1
  285. package/dist/cjs/utils/isRTL.js.map +1 -1
  286. package/dist/cjs/utils/transition.js.map +1 -1
  287. package/dist/esm/components/Types.d.ts +5 -0
  288. package/dist/esm/components/accordion/CAccordion.js.map +1 -1
  289. package/dist/esm/components/accordion/CAccordionBody.js.map +1 -1
  290. package/dist/esm/components/accordion/CAccordionButton.js.map +1 -1
  291. package/dist/esm/components/accordion/CAccordionHeader.js.map +1 -1
  292. package/dist/esm/components/accordion/CAccordionItem.js.map +1 -1
  293. package/dist/esm/components/accordion/index.js.map +1 -1
  294. package/dist/esm/components/alert/CAlert.js.map +1 -1
  295. package/dist/esm/components/alert/CAlertHeading.js.map +1 -1
  296. package/dist/esm/components/alert/CAlertLink.js.map +1 -1
  297. package/dist/esm/components/alert/index.js.map +1 -1
  298. package/dist/esm/components/autocomplete/CAutocomplete.d.ts +594 -0
  299. package/dist/esm/components/autocomplete/CAutocomplete.js +722 -0
  300. package/dist/esm/components/autocomplete/CAutocomplete.js.map +1 -0
  301. package/dist/esm/components/autocomplete/CAutocompleteOptions.d.ts +50 -0
  302. package/dist/esm/components/autocomplete/CAutocompleteOptions.js +114 -0
  303. package/dist/esm/components/autocomplete/CAutocompleteOptions.js.map +1 -0
  304. package/dist/esm/components/autocomplete/index.d.ts +6 -0
  305. package/dist/esm/components/autocomplete/index.js +10 -0
  306. package/dist/esm/components/autocomplete/index.js.map +1 -0
  307. package/dist/esm/components/autocomplete/types.d.ts +18 -0
  308. package/dist/esm/components/autocomplete/utils.d.ts +11 -0
  309. package/dist/esm/components/autocomplete/utils.js +87 -0
  310. package/dist/esm/components/autocomplete/utils.js.map +1 -0
  311. package/dist/esm/components/avatar/CAvatar.js.map +1 -1
  312. package/dist/esm/components/avatar/index.js.map +1 -1
  313. package/dist/esm/components/backdrop/CBackdrop.js.map +1 -1
  314. package/dist/esm/components/backdrop/index.js.map +1 -1
  315. package/dist/esm/components/badge/CBadge.js.map +1 -1
  316. package/dist/esm/components/badge/index.js.map +1 -1
  317. package/dist/esm/components/breadcrumb/CBreadcrumb.js.map +1 -1
  318. package/dist/esm/components/breadcrumb/CBreadcrumbItem.js.map +1 -1
  319. package/dist/esm/components/breadcrumb/index.js.map +1 -1
  320. package/dist/esm/components/button/CButton.js +2 -1
  321. package/dist/esm/components/button/CButton.js.map +1 -1
  322. package/dist/esm/components/button/index.js.map +1 -1
  323. package/dist/esm/components/button-group/CButtonGroup.js.map +1 -1
  324. package/dist/esm/components/button-group/CButtonToolbar.js.map +1 -1
  325. package/dist/esm/components/button-group/index.js.map +1 -1
  326. package/dist/esm/components/calendar/CCalendar.js +5 -7
  327. package/dist/esm/components/calendar/CCalendar.js.map +1 -1
  328. package/dist/esm/components/calendar/index.js.map +1 -1
  329. package/dist/esm/components/calendar/utils.d.ts +19 -5
  330. package/dist/esm/components/calendar/utils.js +20 -9
  331. package/dist/esm/components/calendar/utils.js.map +1 -1
  332. package/dist/esm/components/callout/CCallout.js.map +1 -1
  333. package/dist/esm/components/callout/index.js.map +1 -1
  334. package/dist/esm/components/card/CCard.js.map +1 -1
  335. package/dist/esm/components/card/CCardBody.js.map +1 -1
  336. package/dist/esm/components/card/CCardFooter.js.map +1 -1
  337. package/dist/esm/components/card/CCardGroup.js.map +1 -1
  338. package/dist/esm/components/card/CCardHeader.js.map +1 -1
  339. package/dist/esm/components/card/CCardImage.js.map +1 -1
  340. package/dist/esm/components/card/CCardImageOverlay.js.map +1 -1
  341. package/dist/esm/components/card/CCardLink.js.map +1 -1
  342. package/dist/esm/components/card/CCardSubtitle.js.map +1 -1
  343. package/dist/esm/components/card/CCardText.js.map +1 -1
  344. package/dist/esm/components/card/CCardTitle.js.map +1 -1
  345. package/dist/esm/components/card/index.js.map +1 -1
  346. package/dist/esm/components/carousel/CCarousel.js.map +1 -1
  347. package/dist/esm/components/carousel/CCarouselCaption.js.map +1 -1
  348. package/dist/esm/components/carousel/CCarouselItem.js.map +1 -1
  349. package/dist/esm/components/carousel/index.js.map +1 -1
  350. package/dist/esm/components/close-button/CCloseButton.js.map +1 -1
  351. package/dist/esm/components/close-button/index.js.map +1 -1
  352. package/dist/esm/components/collapse/CCollapse.js.map +1 -1
  353. package/dist/esm/components/collapse/__test__/CCollapse.spec.d.ts +1 -0
  354. package/dist/esm/components/collapse/index.js.map +1 -1
  355. package/dist/esm/components/conditional-teleport/CConditionalTeleport.js.map +1 -1
  356. package/dist/esm/components/conditional-teleport/index.js.map +1 -1
  357. package/dist/esm/components/date-picker/CDatePicker.d.ts +4 -4
  358. package/dist/esm/components/date-picker/CDatePicker.js.map +1 -1
  359. package/dist/esm/components/date-picker/index.js.map +1 -1
  360. package/dist/esm/components/date-range-picker/CDateRangePicker.d.ts +7 -7
  361. package/dist/esm/components/date-range-picker/CDateRangePicker.js +10 -6
  362. package/dist/esm/components/date-range-picker/CDateRangePicker.js.map +1 -1
  363. package/dist/esm/components/date-range-picker/index.js.map +1 -1
  364. package/dist/esm/components/date-range-picker/utils.js.map +1 -1
  365. package/dist/esm/components/dropdown/CDropdown.d.ts +1 -1
  366. package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
  367. package/dist/esm/components/dropdown/CDropdownDivider.js.map +1 -1
  368. package/dist/esm/components/dropdown/CDropdownHeader.js.map +1 -1
  369. package/dist/esm/components/dropdown/CDropdownItem.js.map +1 -1
  370. package/dist/esm/components/dropdown/CDropdownMenu.js.map +1 -1
  371. package/dist/esm/components/dropdown/CDropdownToggle.d.ts +1 -1
  372. package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
  373. package/dist/esm/components/dropdown/index.js.map +1 -1
  374. package/dist/esm/components/dropdown/utils.js.map +1 -1
  375. package/dist/esm/components/element-cover/CElementCover.js.map +1 -1
  376. package/dist/esm/components/element-cover/index.js.map +1 -1
  377. package/dist/esm/components/footer/CFooter.js.map +1 -1
  378. package/dist/esm/components/footer/index.js.map +1 -1
  379. package/dist/esm/components/form/CForm.js.map +1 -1
  380. package/dist/esm/components/form/CFormCheck.js.map +1 -1
  381. package/dist/esm/components/form/CFormControlValidation.js.map +1 -1
  382. package/dist/esm/components/form/CFormControlWrapper.js.map +1 -1
  383. package/dist/esm/components/form/CFormFeedback.js.map +1 -1
  384. package/dist/esm/components/form/CFormFloating.js.map +1 -1
  385. package/dist/esm/components/form/CFormInput.js.map +1 -1
  386. package/dist/esm/components/form/CFormLabel.js.map +1 -1
  387. package/dist/esm/components/form/CFormRange.js.map +1 -1
  388. package/dist/esm/components/form/CFormSelect.js.map +1 -1
  389. package/dist/esm/components/form/CFormSwitch.js.map +1 -1
  390. package/dist/esm/components/form/CFormText.js.map +1 -1
  391. package/dist/esm/components/form/CFormTextarea.js.map +1 -1
  392. package/dist/esm/components/form/CInputGroup.js.map +1 -1
  393. package/dist/esm/components/form/CInputGroupText.js.map +1 -1
  394. package/dist/esm/components/form/index.js.map +1 -1
  395. package/dist/esm/components/grid/CCol.js.map +1 -1
  396. package/dist/esm/components/grid/CContainer.d.ts +1 -1
  397. package/dist/esm/components/grid/CContainer.js.map +1 -1
  398. package/dist/esm/components/grid/CRow.js.map +1 -1
  399. package/dist/esm/components/grid/index.js.map +1 -1
  400. package/dist/esm/components/header/CHeader.js.map +1 -1
  401. package/dist/esm/components/header/CHeaderBrand.js.map +1 -1
  402. package/dist/esm/components/header/CHeaderDivider.js.map +1 -1
  403. package/dist/esm/components/header/CHeaderNav.js.map +1 -1
  404. package/dist/esm/components/header/CHeaderText.js.map +1 -1
  405. package/dist/esm/components/header/CHeaderToggler.js.map +1 -1
  406. package/dist/esm/components/header/index.js.map +1 -1
  407. package/dist/esm/components/image/CImage.js.map +1 -1
  408. package/dist/esm/components/image/index.js.map +1 -1
  409. package/dist/esm/components/index.d.ts +1 -0
  410. package/dist/esm/components/index.js +2 -0
  411. package/dist/esm/components/index.js.map +1 -1
  412. package/dist/esm/components/link/CLink.js.map +1 -1
  413. package/dist/esm/components/link/index.js.map +1 -1
  414. package/dist/esm/components/list-group/CListGroup.js.map +1 -1
  415. package/dist/esm/components/list-group/CListGroupItem.js.map +1 -1
  416. package/dist/esm/components/list-group/index.js.map +1 -1
  417. package/dist/esm/components/loading-button/CLoadingButton.js.map +1 -1
  418. package/dist/esm/components/loading-button/index.js.map +1 -1
  419. package/dist/esm/components/modal/CModal.js.map +1 -1
  420. package/dist/esm/components/modal/CModalBody.js.map +1 -1
  421. package/dist/esm/components/modal/CModalFooter.js.map +1 -1
  422. package/dist/esm/components/modal/CModalHeader.js.map +1 -1
  423. package/dist/esm/components/modal/CModalTitle.js.map +1 -1
  424. package/dist/esm/components/modal/index.js.map +1 -1
  425. package/dist/esm/components/multi-select/CMultiSelect.d.ts +30 -11
  426. package/dist/esm/components/multi-select/CMultiSelect.js +165 -144
  427. package/dist/esm/components/multi-select/CMultiSelect.js.map +1 -1
  428. package/dist/esm/components/multi-select/CMultiSelectNativeSelect.d.ts +1 -1
  429. package/dist/esm/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
  430. package/dist/esm/components/multi-select/CMultiSelectOptions.d.ts +2 -2
  431. package/dist/esm/components/multi-select/CMultiSelectOptions.js +4 -1
  432. package/dist/esm/components/multi-select/CMultiSelectOptions.js.map +1 -1
  433. package/dist/esm/components/multi-select/CMultiSelectSelection.d.ts +1 -1
  434. package/dist/esm/components/multi-select/CMultiSelectSelection.js.map +1 -1
  435. package/dist/esm/components/multi-select/index.js.map +1 -1
  436. package/dist/esm/components/multi-select/utils.d.ts +0 -2
  437. package/dist/esm/components/multi-select/utils.js +1 -25
  438. package/dist/esm/components/multi-select/utils.js.map +1 -1
  439. package/dist/esm/components/nav/CNav.js.map +1 -1
  440. package/dist/esm/components/nav/CNavGroup.js.map +1 -1
  441. package/dist/esm/components/nav/CNavGroupItems.js.map +1 -1
  442. package/dist/esm/components/nav/CNavItem.js.map +1 -1
  443. package/dist/esm/components/nav/CNavLink.js.map +1 -1
  444. package/dist/esm/components/nav/CNavTitle.js.map +1 -1
  445. package/dist/esm/components/nav/index.js.map +1 -1
  446. package/dist/esm/components/navbar/CNavbar.js.map +1 -1
  447. package/dist/esm/components/navbar/CNavbarBrand.js.map +1 -1
  448. package/dist/esm/components/navbar/CNavbarNav.js.map +1 -1
  449. package/dist/esm/components/navbar/CNavbarText.js.map +1 -1
  450. package/dist/esm/components/navbar/CNavbarToggler.js.map +1 -1
  451. package/dist/esm/components/navbar/index.js.map +1 -1
  452. package/dist/esm/components/offcanvas/COffcanvas.js.map +1 -1
  453. package/dist/esm/components/offcanvas/COffcanvasBody.js.map +1 -1
  454. package/dist/esm/components/offcanvas/COffcanvasHeader.js.map +1 -1
  455. package/dist/esm/components/offcanvas/COffcanvasTitle.js.map +1 -1
  456. package/dist/esm/components/offcanvas/index.js.map +1 -1
  457. package/dist/esm/components/pagination/CPagination.js.map +1 -1
  458. package/dist/esm/components/pagination/CPaginationItem.js.map +1 -1
  459. package/dist/esm/components/pagination/index.js.map +1 -1
  460. package/dist/esm/components/password-input/CPasswordInput.js.map +1 -1
  461. package/dist/esm/components/password-input/index.js.map +1 -1
  462. package/dist/esm/components/picker/CPicker.js.map +1 -1
  463. package/dist/esm/components/picker/index.js.map +1 -1
  464. package/dist/esm/components/placeholder/CPlaceholder.js.map +1 -1
  465. package/dist/esm/components/placeholder/index.js.map +1 -1
  466. package/dist/esm/components/popover/CPopover.d.ts +1 -1
  467. package/dist/esm/components/popover/CPopover.js.map +1 -1
  468. package/dist/esm/components/popover/index.js.map +1 -1
  469. package/dist/esm/components/progress/CProgress.js.map +1 -1
  470. package/dist/esm/components/progress/CProgressBar.js.map +1 -1
  471. package/dist/esm/components/progress/CProgressStacked.js.map +1 -1
  472. package/dist/esm/components/progress/index.js.map +1 -1
  473. package/dist/esm/components/props.js.map +1 -1
  474. package/dist/esm/components/range-slider/CRangeSlider.js.map +1 -1
  475. package/dist/esm/components/range-slider/index.js.map +1 -1
  476. package/dist/esm/components/range-slider/utils.js.map +1 -1
  477. package/dist/esm/components/rating/CRating.d.ts +1 -1
  478. package/dist/esm/components/rating/CRating.js.map +1 -1
  479. package/dist/esm/components/rating/index.js.map +1 -1
  480. package/dist/esm/components/sidebar/CSidebar.d.ts +1 -1
  481. package/dist/esm/components/sidebar/CSidebar.js.map +1 -1
  482. package/dist/esm/components/sidebar/CSidebarBrand.js.map +1 -1
  483. package/dist/esm/components/sidebar/CSidebarFooter.js.map +1 -1
  484. package/dist/esm/components/sidebar/CSidebarHeader.js.map +1 -1
  485. package/dist/esm/components/sidebar/CSidebarNav.js.map +1 -1
  486. package/dist/esm/components/sidebar/CSidebarToggler.js.map +1 -1
  487. package/dist/esm/components/sidebar/index.js.map +1 -1
  488. package/dist/esm/components/smart-pagination/CSmartPagination.js.map +1 -1
  489. package/dist/esm/components/smart-pagination/index.js.map +1 -1
  490. package/dist/esm/components/smart-table/CSmartTable.d.ts +1 -1
  491. package/dist/esm/components/smart-table/CSmartTable.js.map +1 -1
  492. package/dist/esm/components/smart-table/CSmartTableBody.js.map +1 -1
  493. package/dist/esm/components/smart-table/CSmartTableCleaner.d.ts +20 -0
  494. package/dist/esm/components/smart-table/CSmartTableHead.js.map +1 -1
  495. package/dist/esm/components/smart-table/CSmartTableInterface.d.ts +58 -0
  496. package/dist/esm/components/smart-table/index.js.map +1 -1
  497. package/dist/esm/components/smart-table/utils.js.map +1 -1
  498. package/dist/esm/components/spinner/CSpinner.js.map +1 -1
  499. package/dist/esm/components/spinner/index.js.map +1 -1
  500. package/dist/esm/components/stepper/CStepper.js.map +1 -1
  501. package/dist/esm/components/stepper/index.js.map +1 -1
  502. package/dist/esm/components/table/CTable.js.map +1 -1
  503. package/dist/esm/components/table/CTableBody.js.map +1 -1
  504. package/dist/esm/components/table/CTableCaption.js.map +1 -1
  505. package/dist/esm/components/table/CTableDataCell.js.map +1 -1
  506. package/dist/esm/components/table/CTableFoot.js.map +1 -1
  507. package/dist/esm/components/table/CTableHead.js.map +1 -1
  508. package/dist/esm/components/table/CTableHeaderCell.js.map +1 -1
  509. package/dist/esm/components/table/CTableRow.js.map +1 -1
  510. package/dist/esm/components/table/index.js.map +1 -1
  511. package/dist/esm/components/table/utils.js.map +1 -1
  512. package/dist/esm/components/tabs/CTab.js.map +1 -1
  513. package/dist/esm/components/tabs/CTabContent.js.map +1 -1
  514. package/dist/esm/components/tabs/CTabList.js.map +1 -1
  515. package/dist/esm/components/tabs/CTabPane.js.map +1 -1
  516. package/dist/esm/components/tabs/CTabPanel.js.map +1 -1
  517. package/dist/esm/components/tabs/CTabs.js.map +1 -1
  518. package/dist/esm/components/tabs/index.js.map +1 -1
  519. package/dist/esm/components/time-picker/CTimePicker.d.ts +5 -5
  520. package/dist/esm/components/time-picker/CTimePicker.js +14 -1
  521. package/dist/esm/components/time-picker/CTimePicker.js.map +1 -1
  522. package/dist/esm/components/time-picker/CTimePickerRollCol.js.map +1 -1
  523. package/dist/esm/components/time-picker/index.js.map +1 -1
  524. package/dist/esm/components/time-picker/utils.js.map +1 -1
  525. package/dist/esm/components/toast/CToast.js.map +1 -1
  526. package/dist/esm/components/toast/CToastBody.js.map +1 -1
  527. package/dist/esm/components/toast/CToastClose.js.map +1 -1
  528. package/dist/esm/components/toast/CToastHeader.js.map +1 -1
  529. package/dist/esm/components/toast/CToaster.js.map +1 -1
  530. package/dist/esm/components/toast/index.js.map +1 -1
  531. package/dist/esm/components/tooltip/CTooltip.d.ts +1 -1
  532. package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
  533. package/dist/esm/components/tooltip/index.js.map +1 -1
  534. package/dist/esm/components/virtual-scroller/CVirtualScroller.js.map +1 -1
  535. package/dist/esm/components/virtual-scroller/index.js.map +1 -1
  536. package/dist/esm/components/widgets/CWidgetStatsA.js.map +1 -1
  537. package/dist/esm/components/widgets/CWidgetStatsB.js.map +1 -1
  538. package/dist/esm/components/widgets/CWidgetStatsC.js.map +1 -1
  539. package/dist/esm/components/widgets/CWidgetStatsD.js.map +1 -1
  540. package/dist/esm/components/widgets/CWidgetStatsE.js.map +1 -1
  541. package/dist/esm/components/widgets/CWidgetStatsF.js.map +1 -1
  542. package/dist/esm/components/widgets/index.js.map +1 -1
  543. package/dist/esm/composables/useColorModes.js.map +1 -1
  544. package/dist/esm/composables/useDebouncedCallback.js.map +1 -1
  545. package/dist/esm/composables/useDropdownWithPopper.js.map +1 -1
  546. package/dist/esm/composables/useIsVisible.js.map +1 -1
  547. package/dist/esm/composables/usePopper.js.map +1 -1
  548. package/dist/esm/composables/useUniqueId.js.map +1 -1
  549. package/dist/esm/directives/v-c-placeholder.js.map +1 -1
  550. package/dist/esm/directives/v-c-popover.js.map +1 -1
  551. package/dist/esm/directives/v-c-tooltip.js.map +1 -1
  552. package/dist/esm/directives/v-c-visible.js.map +1 -1
  553. package/dist/esm/index.js +2 -0
  554. package/dist/esm/index.js.map +1 -1
  555. package/dist/esm/node_modules/@coreui/icons-vue/dist/index.es.js.map +1 -1
  556. package/dist/esm/node_modules/vue-types/dist/index.js.map +1 -1
  557. package/dist/esm/node_modules/vue-types/dist/shared/vue-types.8139b772.js.map +1 -1
  558. package/dist/esm/props.js.map +1 -1
  559. package/dist/esm/utils/getNextActiveElement.js.map +1 -1
  560. package/dist/esm/utils/getNextSibling.d.ts +2 -0
  561. package/dist/esm/utils/getNextSibling.js +18 -0
  562. package/dist/esm/utils/getNextSibling.js.map +1 -0
  563. package/dist/esm/utils/getPreviousSibling.d.ts +2 -0
  564. package/dist/esm/utils/getPreviousSibling.js +18 -0
  565. package/dist/esm/utils/getPreviousSibling.js.map +1 -0
  566. package/dist/esm/utils/getRTLPlacement.js.map +1 -1
  567. package/dist/esm/utils/index.d.ts +3 -1
  568. package/dist/esm/utils/isEqual.js.map +1 -1
  569. package/dist/esm/utils/isObjectInArray.js.map +1 -1
  570. package/dist/esm/utils/isRTL.js.map +1 -1
  571. package/dist/esm/utils/transition.js.map +1 -1
  572. package/package.json +7 -7
  573. package/src/components/autocomplete/CAutocomplete.ts +855 -0
  574. package/src/components/autocomplete/CAutocompleteOptions.ts +144 -0
  575. package/src/components/autocomplete/__tests__/CAutocomplete.spec.ts +429 -0
  576. package/src/components/autocomplete/__tests__/CAutocompleteOptions.spec.ts +368 -0
  577. package/src/components/autocomplete/__tests__/__snapshots__/CAutocomplete.spec.ts.snap +39 -0
  578. package/src/components/autocomplete/index.ts +10 -0
  579. package/src/components/autocomplete/types.ts +25 -0
  580. package/src/components/autocomplete/utils.ts +131 -0
  581. package/src/components/button/CButton.ts +2 -1
  582. package/src/components/calendar/CCalendar.ts +5 -10
  583. package/src/components/calendar/utils.ts +24 -10
  584. package/src/components/date-range-picker/CDateRangePicker.ts +33 -28
  585. package/src/components/index.ts +1 -0
  586. package/src/components/multi-select/CMultiSelect.ts +36 -16
  587. package/src/components/multi-select/CMultiSelectOptions.ts +5 -1
  588. package/src/components/multi-select/utils.ts +0 -34
  589. package/src/components/time-picker/CTimePicker.ts +13 -1
  590. package/src/utils/getNextSibling.ts +18 -0
  591. package/src/utils/getPreviousSibling.ts +18 -0
  592. package/src/utils/index.ts +4 -0
@@ -0,0 +1,368 @@
1
+ import { mount, flushPromises } from '@vue/test-utils'
2
+ import { h } from 'vue'
3
+ import { CAutocompleteOptions } from '../CAutocompleteOptions'
4
+
5
+ const mockOptions = [
6
+ { label: 'Apple', value: 1 },
7
+ { label: 'Banana', value: 2 },
8
+ { label: 'Cherry', value: 3 },
9
+ { label: 'Date', value: 4 },
10
+ ]
11
+
12
+ const mockOptionsWithGroups = [
13
+ {
14
+ label: 'Fruits',
15
+ options: [
16
+ { label: 'Apple', value: 1 },
17
+ { label: 'Banana', value: 2 },
18
+ ],
19
+ },
20
+ {
21
+ label: 'Vegetables',
22
+ options: [
23
+ { label: 'Carrot', value: 3 },
24
+ { label: 'Spinach', value: 4 },
25
+ ],
26
+ },
27
+ ]
28
+
29
+ describe('CAutocompleteOptions', () => {
30
+ test('loads and displays CAutocompleteOptions component', async () => {
31
+ const wrapper = mount(CAutocompleteOptions, {
32
+ props: {
33
+ options: mockOptions,
34
+ selected: null,
35
+ },
36
+ })
37
+ expect(wrapper.html()).toMatchSnapshot()
38
+ })
39
+
40
+ test('CAutocompleteOptions renders all options', async () => {
41
+ const wrapper = mount(CAutocompleteOptions, {
42
+ props: {
43
+ options: mockOptions,
44
+ selected: null,
45
+ },
46
+ })
47
+
48
+ expect(wrapper.text()).toContain('Apple')
49
+ expect(wrapper.text()).toContain('Banana')
50
+ expect(wrapper.text()).toContain('Cherry')
51
+ expect(wrapper.text()).toContain('Date')
52
+ })
53
+
54
+ test('CAutocompleteOptions renders option groups', async () => {
55
+ const wrapper = mount(CAutocompleteOptions, {
56
+ props: {
57
+ options: mockOptionsWithGroups,
58
+ selected: null,
59
+ },
60
+ })
61
+
62
+ expect(wrapper.text()).toContain('Fruits')
63
+ expect(wrapper.text()).toContain('Vegetables')
64
+ expect(wrapper.text()).toContain('Apple')
65
+ expect(wrapper.text()).toContain('Carrot')
66
+ })
67
+
68
+ test('CAutocompleteOptions marks selected option', async () => {
69
+ const wrapper = mount(CAutocompleteOptions, {
70
+ props: {
71
+ options: mockOptions,
72
+ selected: mockOptions[0],
73
+ },
74
+ })
75
+
76
+ const selectedOption = wrapper.find('.autocomplete-option.selected')
77
+ expect(selectedOption.exists()).toBe(true)
78
+ expect(selectedOption.text()).toContain('Apple')
79
+ })
80
+
81
+ test('CAutocompleteOptions calls onOptionClick when option clicked', async () => {
82
+ const wrapper = mount(CAutocompleteOptions, {
83
+ props: {
84
+ options: mockOptions,
85
+ selected: null,
86
+ },
87
+ })
88
+
89
+ const option = wrapper.find('.autocomplete-option')
90
+ await option.trigger('click')
91
+ await flushPromises()
92
+
93
+ expect(wrapper.emitted('optionClick')).toBeTruthy()
94
+ expect(wrapper.emitted('optionClick')![0]).toEqual([mockOptions[0]])
95
+ })
96
+
97
+ test('CAutocompleteOptions handles Enter key press', async () => {
98
+ const wrapper = mount(CAutocompleteOptions, {
99
+ props: {
100
+ options: mockOptions,
101
+ selected: null,
102
+ },
103
+ })
104
+
105
+ const option = wrapper.find('.autocomplete-option')
106
+ await option.trigger('keydown', { key: 'Enter' })
107
+ await flushPromises()
108
+
109
+ expect(wrapper.emitted('optionClick')).toBeTruthy()
110
+ expect(wrapper.emitted('optionClick')![0]).toEqual([mockOptions[0]])
111
+ })
112
+
113
+ test('CAutocompleteOptions handles Space key press', async () => {
114
+ const wrapper = mount(CAutocompleteOptions, {
115
+ props: {
116
+ options: mockOptions,
117
+ selected: null,
118
+ },
119
+ })
120
+
121
+ const option = wrapper.find('.autocomplete-option')
122
+ await option.trigger('keydown', { code: 'Space' })
123
+ await flushPromises()
124
+
125
+ expect(wrapper.emitted('optionClick')).toBeTruthy()
126
+ expect(wrapper.emitted('optionClick')![0]).toEqual([mockOptions[0]])
127
+ })
128
+
129
+ test('CAutocompleteOptions navigates with arrow keys', async () => {
130
+ // Mock the DOM navigation functions
131
+ const mockGetNextSibling = vi.fn().mockReturnValue({
132
+ focus: vi.fn(),
133
+ })
134
+
135
+ // Mock the utils import
136
+ vi.mock('../../utils', () => ({
137
+ getNextSibling: mockGetNextSibling,
138
+ getPreviousSibling: vi.fn(),
139
+ }))
140
+
141
+ const wrapper = mount(CAutocompleteOptions, {
142
+ props: {
143
+ options: mockOptions,
144
+ selected: null,
145
+ },
146
+ attachTo: document.body,
147
+ })
148
+
149
+ const firstOption = wrapper.find('.autocomplete-option')
150
+ await firstOption.trigger('keydown', { key: 'ArrowDown' })
151
+
152
+ expect(mockGetNextSibling).toHaveBeenCalled()
153
+ })
154
+
155
+ test('CAutocompleteOptions shows no results message', async () => {
156
+ const wrapper = mount(CAutocompleteOptions, {
157
+ props: {
158
+ options: [],
159
+ selected: null,
160
+ searchNoResultsLabel: 'No options found',
161
+ },
162
+ })
163
+
164
+ expect(wrapper.text()).toContain('No options found')
165
+ expect(wrapper.find('.autocomplete-options-empty').exists()).toBe(true)
166
+ })
167
+
168
+ test('CAutocompleteOptions highlights search matches', async () => {
169
+ const wrapper = mount(CAutocompleteOptions, {
170
+ props: {
171
+ options: mockOptions,
172
+ selected: null,
173
+ highlightOptionsOnSearch: true,
174
+ searchValue: 'app',
175
+ },
176
+ })
177
+
178
+ const option = wrapper.find('.autocomplete-option')
179
+ expect(option.exists()).toBe(true)
180
+ // Check if the option contains highlighted content
181
+ expect(option.html()).toContain('Apple')
182
+ })
183
+
184
+ test('CAutocompleteOptions uses custom option template', async () => {
185
+ const customTemplate = (option: any) =>
186
+ h('div', { class: 'custom-option' }, `${option.label} - ${option.value}`)
187
+
188
+ const wrapper = mount(CAutocompleteOptions, {
189
+ props: {
190
+ options: mockOptions,
191
+ selected: null,
192
+ optionsTemplate: customTemplate,
193
+ },
194
+ })
195
+
196
+ expect(wrapper.text()).toContain('Apple - 1')
197
+ expect(wrapper.text()).toContain('Banana - 2')
198
+ })
199
+
200
+ test('CAutocompleteOptions uses custom group template', async () => {
201
+ const customGroupTemplate = (group: any) =>
202
+ h('div', { class: 'custom-group' }, group.label.toUpperCase())
203
+
204
+ const wrapper = mount(CAutocompleteOptions, {
205
+ props: {
206
+ options: mockOptionsWithGroups,
207
+ selected: null,
208
+ optionsGroupsTemplate: customGroupTemplate,
209
+ },
210
+ })
211
+
212
+ expect(wrapper.text()).toContain('FRUITS')
213
+ expect(wrapper.text()).toContain('VEGETABLES')
214
+ })
215
+
216
+ test('CAutocompleteOptions shows loading state', async () => {
217
+ const wrapper = mount(CAutocompleteOptions, {
218
+ props: {
219
+ options: mockOptions,
220
+ selected: null,
221
+ loading: true,
222
+ },
223
+ global: {
224
+ stubs: {
225
+ CElementCover: true,
226
+ },
227
+ },
228
+ })
229
+
230
+ expect(wrapper.findComponent({ name: 'CElementCover' }).exists()).toBe(true)
231
+ })
232
+
233
+ test('CAutocompleteOptions renders with virtual scroller', async () => {
234
+ const wrapper = mount(CAutocompleteOptions, {
235
+ props: {
236
+ options: mockOptions,
237
+ selected: null,
238
+ virtualScroller: true,
239
+ visibleItems: 2,
240
+ },
241
+ global: {
242
+ stubs: {
243
+ CVirtualScroller: true,
244
+ },
245
+ },
246
+ })
247
+
248
+ expect(wrapper.findComponent({ name: 'CVirtualScroller' }).exists()).toBe(true)
249
+ })
250
+
251
+ test('CAutocompleteOptions sets max height', async () => {
252
+ const wrapper = mount(CAutocompleteOptions, {
253
+ props: {
254
+ options: mockOptions,
255
+ selected: null,
256
+ optionsMaxHeight: 200,
257
+ },
258
+ })
259
+
260
+ const optionsContainer = wrapper.find('.autocomplete-options')
261
+ expect(optionsContainer.attributes('style')).toContain('max-height: 200px')
262
+ })
263
+
264
+ test('CAutocompleteOptions marks disabled options', async () => {
265
+ const optionsWithDisabled = [
266
+ { label: 'Apple', value: 1 },
267
+ { label: 'Banana', value: 2, disabled: true },
268
+ ]
269
+
270
+ const wrapper = mount(CAutocompleteOptions, {
271
+ props: {
272
+ options: optionsWithDisabled,
273
+ selected: null,
274
+ },
275
+ })
276
+
277
+ const disabledOption = wrapper.find('.autocomplete-option.disabled')
278
+ expect(disabledOption.exists()).toBe(true)
279
+ expect(disabledOption.text()).toContain('Banana')
280
+ })
281
+
282
+ test('CAutocompleteOptions has correct accessibility attributes', async () => {
283
+ const wrapper = mount(CAutocompleteOptions, {
284
+ props: {
285
+ options: mockOptions,
286
+ selected: null,
287
+ },
288
+ })
289
+
290
+ const listbox = wrapper.find('[role="listbox"]')
291
+ expect(listbox.exists()).toBe(true)
292
+
293
+ const options = wrapper.findAll('.autocomplete-option')
294
+ expect(options).toHaveLength(4)
295
+
296
+ options.forEach((option) => {
297
+ expect(option.attributes('tabindex')).toBe('0')
298
+ })
299
+ })
300
+
301
+ test('CAutocompleteOptions handles string options', async () => {
302
+ const stringOptions = ['Apple', 'Banana', 'Cherry']
303
+ const wrapper = mount(CAutocompleteOptions, {
304
+ props: {
305
+ options: stringOptions,
306
+ selected: null,
307
+ },
308
+ })
309
+
310
+ expect(wrapper.text()).toContain('Apple')
311
+ expect(wrapper.text()).toContain('Banana')
312
+ expect(wrapper.text()).toContain('Cherry')
313
+ })
314
+
315
+ test('CAutocompleteOptions handles mixed option types', async () => {
316
+ const mixedOptions = [
317
+ 'Simple String',
318
+ { label: 'Object Option', value: 1 },
319
+ {
320
+ label: 'Group',
321
+ options: [
322
+ { label: 'Grouped Option', value: 2 },
323
+ ],
324
+ },
325
+ ]
326
+
327
+ const wrapper = mount(CAutocompleteOptions, {
328
+ props: {
329
+ options: mixedOptions,
330
+ selected: null,
331
+ },
332
+ })
333
+
334
+ expect(wrapper.text()).toContain('Simple String')
335
+ expect(wrapper.text()).toContain('Object Option')
336
+ expect(wrapper.text()).toContain('Group')
337
+ expect(wrapper.text()).toContain('Grouped Option')
338
+ })
339
+
340
+ test('CAutocompleteOptions emits optionClick for all option types', async () => {
341
+ const wrapper = mount(CAutocompleteOptions, {
342
+ props: {
343
+ options: ['String Option'],
344
+ selected: null,
345
+ },
346
+ })
347
+
348
+ const option = wrapper.find('.autocomplete-option')
349
+ await option.trigger('click')
350
+ await flushPromises()
351
+
352
+ expect(wrapper.emitted('optionClick')).toBeTruthy()
353
+ expect(wrapper.emitted('optionClick')![0]).toEqual(['String Option'])
354
+ })
355
+
356
+ test('CAutocompleteOptions handles empty searchNoResultsLabel correctly', async () => {
357
+ const wrapper = mount(CAutocompleteOptions, {
358
+ props: {
359
+ options: [],
360
+ selected: null,
361
+ searchNoResultsLabel: false,
362
+ },
363
+ })
364
+
365
+ expect(wrapper.find('.autocomplete-options-empty').exists()).toBe(true)
366
+ expect(wrapper.find('.autocomplete-options-empty').text()).toBe('false')
367
+ })
368
+ })
@@ -0,0 +1,39 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`CAutocomplete CAutocomplete customize 1`] = `
4
+ "<div class="autocomplete autocomplete-lg disabled">
5
+ <div class="autocomplete-input-group">
6
+ <!----><input type="text" class="autocomplete-input" disabled="" id="v-0" name="v-0" placeholder="Select option" autocomplete="off" aria-autocomplete="list" aria-expanded="false" aria-haspopup="listbox" role="combobox">
7
+ <div class="autocomplete-buttons">
8
+ <!----><button type="button" class="autocomplete-indicator"></button>
9
+ </div>
10
+ </div>
11
+ <div class="autocomplete-dropdown" role="listbox" aria-labelledby="v-0">
12
+ <div class="autocomplete-options" role="listbox">
13
+ <div class="autocomplete-option" tabindex="0">Apple</div>
14
+ <div class="autocomplete-option" tabindex="0">Banana</div>
15
+ <div class="autocomplete-option" tabindex="0">Cherry</div>
16
+ <div class="autocomplete-option" tabindex="0">Date</div>
17
+ </div>
18
+ <!---->
19
+ </div>
20
+ </div>"
21
+ `;
22
+
23
+ exports[`CAutocomplete loads and displays CAutocomplete component 1`] = `
24
+ "<div class="autocomplete">
25
+ <div class="autocomplete-input-group">
26
+ <!----><input type="text" class="autocomplete-input" id="v-0" name="v-0" autocomplete="off" aria-autocomplete="list" aria-expanded="false" aria-haspopup="listbox" role="combobox">
27
+ <!---->
28
+ </div>
29
+ <div class="autocomplete-dropdown" role="listbox" aria-labelledby="v-0">
30
+ <div class="autocomplete-options" role="listbox">
31
+ <div class="autocomplete-option" tabindex="0">Apple</div>
32
+ <div class="autocomplete-option" tabindex="0">Banana</div>
33
+ <div class="autocomplete-option" tabindex="0">Cherry</div>
34
+ <div class="autocomplete-option" tabindex="0">Date</div>
35
+ </div>
36
+ <!---->
37
+ </div>
38
+ </div>"
39
+ `;
@@ -0,0 +1,10 @@
1
+ import { App } from 'vue'
2
+ import { CAutocomplete } from './CAutocomplete'
3
+
4
+ const CAutocompletePlugin = {
5
+ install: (app: App): void => {
6
+ app.component(CAutocomplete.name as string, CAutocomplete)
7
+ },
8
+ }
9
+
10
+ export { CAutocompletePlugin, CAutocomplete }
@@ -0,0 +1,25 @@
1
+ export type Option =
2
+ | string
3
+ | {
4
+ disabled?: boolean
5
+ label: string
6
+ options?: Option[]
7
+ custom?: boolean
8
+ selected?: boolean
9
+ value?: number | string
10
+ [key: string]: unknown
11
+ }
12
+
13
+ export type OptionsGroup = {
14
+ label: string
15
+ options?: Option[]
16
+ [key: string]: unknown
17
+ }
18
+
19
+ export type Search =
20
+ | 'external'
21
+ | 'global'
22
+ | {
23
+ external?: boolean
24
+ global?: boolean
25
+ }
@@ -0,0 +1,131 @@
1
+ import type { Option, OptionsGroup, Search } from './types'
2
+
3
+ export const filterOptions = (
4
+ options: (Option | OptionsGroup)[],
5
+ search: string
6
+ ): (Option | OptionsGroup)[] => {
7
+ const result: (Option | OptionsGroup)[] = []
8
+
9
+ options.forEach((item: Option | OptionsGroup) => {
10
+ if (typeof item !== 'string' && 'options' in item && Array.isArray(item.options)) {
11
+ const filteredOptions = filterOptions(item.options, search)
12
+ if (filteredOptions.length > 0) {
13
+ result.push({ ...item, options: filteredOptions })
14
+ }
15
+ } else if (getOptionLabel(item).toLowerCase().includes(search.toLowerCase())) {
16
+ result.push(item)
17
+ }
18
+ })
19
+
20
+ return result
21
+ }
22
+
23
+ export const flattenOptionsArray = (
24
+ options: (Option | OptionsGroup)[],
25
+ keepGroupLabel?: boolean
26
+ ): (Option | OptionsGroup)[] => {
27
+ const optionsList: (Option | OptionsGroup)[] = []
28
+
29
+ for (const option of options) {
30
+ if (typeof option !== 'string' && 'options' in option && Array.isArray(option.options)) {
31
+ if (keepGroupLabel) {
32
+ // Add group header (without options property to indicate it's a header)
33
+ const { options: _, ...groupHeader } = option
34
+ optionsList.push(groupHeader)
35
+ }
36
+ optionsList.push(...option.options)
37
+ } else {
38
+ optionsList.push(option)
39
+ }
40
+ }
41
+
42
+ return optionsList
43
+ }
44
+
45
+ export const isExternalSearch = (search: Search | undefined): boolean => {
46
+ return (
47
+ (typeof search === 'string' && search === 'external') ||
48
+ (typeof search === 'object' && search.external === true)
49
+ )
50
+ }
51
+
52
+ export const isGlobalSearch = (search: Search | undefined): boolean => {
53
+ return (
54
+ (typeof search === 'string' && search === 'global') ||
55
+ (typeof search === 'object' && search.global === true)
56
+ )
57
+ }
58
+
59
+ export const getOptionLabel = (option: Option) =>
60
+ typeof option === 'string' ? option : option.label
61
+
62
+ export const highlightSubstring = (string: string, query?: string) => {
63
+ if (query) {
64
+ const regex = new RegExp(query, 'gi')
65
+ return string.replace(regex, (string) => `<strong>${string}</strong>`)
66
+ }
67
+
68
+ return string
69
+ }
70
+
71
+ export const isOptionDisabled = (option: Option | OptionsGroup | string) =>
72
+ typeof option === 'string' ? false : option.disabled
73
+
74
+ export const isOptionSelected = (
75
+ option: Option | OptionsGroup | string,
76
+ selected: Option | null
77
+ ) => {
78
+ if (!selected) {
79
+ return false
80
+ }
81
+
82
+ if (typeof option === 'string' && typeof selected === 'string') {
83
+ return selected === option
84
+ }
85
+
86
+ if (typeof option !== 'string' && typeof selected !== 'string') {
87
+ return selected.label === option.label
88
+ }
89
+
90
+ return false
91
+ }
92
+
93
+ export const getFirstOptionByLabel = (
94
+ value: string,
95
+ options: (Option | OptionsGroup)[]
96
+ ): Option | null => {
97
+ for (const option of options) {
98
+ if (typeof option !== 'string' && 'options' in option && Array.isArray(option.options)) {
99
+ const found = getFirstOptionByLabel(value, option.options)
100
+ if (found) {
101
+ return found
102
+ }
103
+ }
104
+
105
+ if (getOptionLabel(option).toLowerCase() === value.toLowerCase()) {
106
+ return option
107
+ }
108
+ }
109
+
110
+ return null
111
+ }
112
+
113
+ export const getFirstOptionByValue = (
114
+ value: number,
115
+ options: (Option | OptionsGroup)[]
116
+ ): Option | null => {
117
+ for (const option of options) {
118
+ if (typeof option !== 'string' && 'options' in option && Array.isArray(option.options)) {
119
+ const found = getFirstOptionByValue(value, option.options)
120
+ if (found) {
121
+ return found
122
+ }
123
+ }
124
+
125
+ if (typeof option !== 'string' && 'value' in option && option.value === value) {
126
+ return option
127
+ }
128
+ }
129
+
130
+ return null
131
+ }
@@ -93,8 +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}`,
97
96
  {
97
+ [`btn-${props.variant}-${props.color}`]: props.color && props.variant,
98
+ [`btn-${props.variant}`]: !props.color && props.variant,
98
99
  [`btn-${props.color}`]: props.color && !props.variant,
99
100
  [`btn-${props.size}`]: props.size,
100
101
  active: props.active,
@@ -675,13 +675,8 @@ const CCalendar = defineComponent({
675
675
  ),
676
676
  h('tbody', {}, [
677
677
  view.value === 'days' &&
678
- monthDetails.map((week) => {
679
- const date = convertToDateObject(
680
- week.weekNumber === 0
681
- ? `${_calendarDate.getFullYear()}W53`
682
- : `${_calendarDate.getFullYear()}W${week.weekNumber}`,
683
- props.selectionType
684
- )
678
+ monthDetails.map(({ week, days }) => {
679
+ const { date } = days[0]
685
680
  const isDisabled = isDateDisabled(
686
681
  date,
687
682
  minDate.value,
@@ -689,7 +684,7 @@ const CCalendar = defineComponent({
689
684
  props.disabledDates
690
685
  )
691
686
  const isSelected = isDateSelected(date, startDate.value, endDate.value)
692
- const current = week.days.some((day) => day.month === 'current')
687
+ const current = days.some((day) => day.month === 'current')
693
688
  return h(
694
689
  'tr',
695
690
  {
@@ -724,9 +719,9 @@ const CCalendar = defineComponent({
724
719
  h(
725
720
  'th',
726
721
  { class: 'calendar-cell-week-number' },
727
- week.weekNumber === 0 ? 53 : week.weekNumber
722
+ week.number
728
723
  ),
729
- week.days.map(({ date, month }: { date: Date; month: string }) => {
724
+ days.map(({ date, month }: { date: Date; month: string }) => {
730
725
  const isDisabled = isDateDisabled(
731
726
  date,
732
727
  minDate.value,
@@ -87,7 +87,8 @@ export const getDateBySelectionType = (
87
87
  }
88
88
 
89
89
  if (selectionType === 'week') {
90
- return `${date.getFullYear()}W${getWeekNumber(date)}`
90
+ const { year, weekNumber } = getISOWeekNumberAndYear(date)
91
+ return `${year}W${weekNumber.toString().padStart(2, '0')}`
91
92
  }
92
93
 
93
94
  if (selectionType === 'month') {
@@ -254,12 +255,20 @@ const getTrailingDays = (
254
255
  }
255
256
 
256
257
  /**
257
- * Calculates the ISO week number for a given date.
258
- * @param date - The date to calculate the week number for.
259
- * @returns The ISO week number.
258
+ * Calculates the ISO 8601 week number and year for a given date.
259
+ *
260
+ * In the ISO 8601 standard:
261
+ * - Weeks start on Monday.
262
+ * - The first week of the year is the one that contains January 4th.
263
+ * - The year of the week may differ from the calendar year (e.g., Dec 29, 2025 is in ISO year 2026).
264
+ *
265
+ * @param {Date} date - The date for which to calculate the ISO week number and year.
266
+ * @returns {{ weekNumber: number, year: number }} An object containing:
267
+ * - `weekNumber`: the ISO week number (1–53),
268
+ * - `year`: the ISO year (may differ from the calendar year of the date).
260
269
  */
261
- export const getWeekNumber = (date: Date): number => {
262
- const tempDate = new Date(date.getTime())
270
+ export const getISOWeekNumberAndYear = (date: Date): { weekNumber: number; year: number } => {
271
+ const tempDate = new Date(date)
263
272
  tempDate.setHours(0, 0, 0, 0)
264
273
 
265
274
  // Thursday in current week decides the year
@@ -270,7 +279,7 @@ export const getWeekNumber = (date: Date): number => {
270
279
  // Calculate full weeks to the date
271
280
  const weekNumber = 1 + Math.round((tempDate.getTime() - week1.getTime()) / 86_400_000 / 7)
272
281
 
273
- return weekNumber
282
+ return { weekNumber, year: tempDate.getFullYear() }
274
283
  }
275
284
 
276
285
  /**
@@ -284,22 +293,27 @@ export const getMonthDetails = (
284
293
  year: number,
285
294
  month: number,
286
295
  firstDayOfWeek: number
287
- ): { weekNumber?: number; days: { date: Date; month: string }[] }[] => {
296
+ ): { week: { number: number; year: number }; days: { date: Date; month: string }[] }[] => {
288
297
  const daysPrevMonth = getLeadingDays(year, month, firstDayOfWeek)
289
298
  const daysThisMonth = getMonthDays(year, month)
290
299
  const daysNextMonth = getTrailingDays(year, month, daysPrevMonth, daysThisMonth)
291
300
  const days = [...daysPrevMonth, ...daysThisMonth, ...daysNextMonth]
292
- const weeks: { weekNumber?: number; days: { date: Date; month: string }[] }[] = []
301
+ const weeks: {
302
+ week: { number: number; year: number }
303
+ days: { date: Date; month: string }[]
304
+ }[] = []
293
305
 
294
306
  days.forEach((day, index) => {
295
307
  if (index % 7 === 0 || weeks.length === 0) {
296
308
  weeks.push({
309
+ week: { number: 0, year: 0 },
297
310
  days: [],
298
311
  })
299
312
  }
300
313
 
301
314
  if ((index + 1) % 7 === 0) {
302
- weeks[weeks.length - 1].weekNumber = getWeekNumber(day.date)
315
+ const { weekNumber, year } = getISOWeekNumberAndYear(day.date)
316
+ weeks[weeks.length - 1].week = { number: weekNumber, year }
303
317
  }
304
318
 
305
319
  weeks[weeks.length - 1].days.push(day)