@coreui/vue-pro 5.11.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 (600) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/accordion/CAccordion.js.map +1 -1
  3. package/dist/cjs/components/accordion/CAccordionBody.js.map +1 -1
  4. package/dist/cjs/components/accordion/CAccordionButton.js.map +1 -1
  5. package/dist/cjs/components/accordion/CAccordionHeader.js.map +1 -1
  6. package/dist/cjs/components/accordion/CAccordionItem.js.map +1 -1
  7. package/dist/cjs/components/accordion/index.js.map +1 -1
  8. package/dist/cjs/components/alert/CAlert.js.map +1 -1
  9. package/dist/cjs/components/alert/CAlertHeading.js.map +1 -1
  10. package/dist/cjs/components/alert/CAlertLink.js.map +1 -1
  11. package/dist/cjs/components/alert/index.js.map +1 -1
  12. package/dist/cjs/components/autocomplete/CAutocomplete.d.ts +594 -0
  13. package/dist/cjs/components/autocomplete/CAutocomplete.js +724 -0
  14. package/dist/cjs/components/autocomplete/CAutocomplete.js.map +1 -0
  15. package/dist/cjs/components/autocomplete/CAutocompleteOptions.d.ts +50 -0
  16. package/dist/cjs/components/autocomplete/CAutocompleteOptions.js +116 -0
  17. package/dist/cjs/components/autocomplete/CAutocompleteOptions.js.map +1 -0
  18. package/dist/cjs/components/autocomplete/index.d.ts +6 -0
  19. package/dist/cjs/components/autocomplete/index.js +13 -0
  20. package/dist/cjs/components/autocomplete/index.js.map +1 -0
  21. package/dist/cjs/components/autocomplete/types.d.ts +18 -0
  22. package/dist/cjs/components/autocomplete/utils.d.ts +11 -0
  23. package/dist/cjs/components/autocomplete/utils.js +98 -0
  24. package/dist/cjs/components/autocomplete/utils.js.map +1 -0
  25. package/dist/cjs/components/avatar/CAvatar.js.map +1 -1
  26. package/dist/cjs/components/avatar/index.js.map +1 -1
  27. package/dist/cjs/components/backdrop/CBackdrop.js.map +1 -1
  28. package/dist/cjs/components/backdrop/index.js.map +1 -1
  29. package/dist/cjs/components/badge/CBadge.js.map +1 -1
  30. package/dist/cjs/components/badge/index.js.map +1 -1
  31. package/dist/cjs/components/breadcrumb/CBreadcrumb.js.map +1 -1
  32. package/dist/cjs/components/breadcrumb/CBreadcrumbItem.js.map +1 -1
  33. package/dist/cjs/components/breadcrumb/index.js.map +1 -1
  34. package/dist/cjs/components/button/CButton.js +2 -1
  35. package/dist/cjs/components/button/CButton.js.map +1 -1
  36. package/dist/cjs/components/button/index.js.map +1 -1
  37. package/dist/cjs/components/button-group/CButtonGroup.js.map +1 -1
  38. package/dist/cjs/components/button-group/CButtonToolbar.js.map +1 -1
  39. package/dist/cjs/components/button-group/index.js.map +1 -1
  40. package/dist/cjs/components/calendar/CCalendar.js +5 -7
  41. package/dist/cjs/components/calendar/CCalendar.js.map +1 -1
  42. package/dist/cjs/components/calendar/index.js.map +1 -1
  43. package/dist/cjs/components/calendar/utils.d.ts +20 -6
  44. package/dist/cjs/components/calendar/utils.js +23 -9
  45. package/dist/cjs/components/calendar/utils.js.map +1 -1
  46. package/dist/cjs/components/callout/CCallout.js.map +1 -1
  47. package/dist/cjs/components/callout/index.js.map +1 -1
  48. package/dist/cjs/components/card/CCard.js.map +1 -1
  49. package/dist/cjs/components/card/CCardBody.js.map +1 -1
  50. package/dist/cjs/components/card/CCardFooter.js.map +1 -1
  51. package/dist/cjs/components/card/CCardGroup.js.map +1 -1
  52. package/dist/cjs/components/card/CCardHeader.js.map +1 -1
  53. package/dist/cjs/components/card/CCardImage.js.map +1 -1
  54. package/dist/cjs/components/card/CCardImageOverlay.js.map +1 -1
  55. package/dist/cjs/components/card/CCardLink.js.map +1 -1
  56. package/dist/cjs/components/card/CCardSubtitle.js.map +1 -1
  57. package/dist/cjs/components/card/CCardText.js.map +1 -1
  58. package/dist/cjs/components/card/CCardTitle.js.map +1 -1
  59. package/dist/cjs/components/card/index.js.map +1 -1
  60. package/dist/cjs/components/carousel/CCarousel.js.map +1 -1
  61. package/dist/cjs/components/carousel/CCarouselCaption.js.map +1 -1
  62. package/dist/cjs/components/carousel/CCarouselItem.js.map +1 -1
  63. package/dist/cjs/components/carousel/index.js.map +1 -1
  64. package/dist/cjs/components/close-button/CCloseButton.js.map +1 -1
  65. package/dist/cjs/components/close-button/index.js.map +1 -1
  66. package/dist/cjs/components/collapse/CCollapse.js.map +1 -1
  67. package/dist/cjs/components/collapse/index.js.map +1 -1
  68. package/dist/cjs/components/conditional-teleport/CConditionalTeleport.js.map +1 -1
  69. package/dist/cjs/components/conditional-teleport/index.js.map +1 -1
  70. package/dist/cjs/components/date-picker/CDatePicker.d.ts +4 -4
  71. package/dist/cjs/components/date-picker/CDatePicker.js.map +1 -1
  72. package/dist/cjs/components/date-picker/index.js.map +1 -1
  73. package/dist/cjs/components/date-range-picker/CDateRangePicker.d.ts +7 -7
  74. package/dist/cjs/components/date-range-picker/CDateRangePicker.js +10 -6
  75. package/dist/cjs/components/date-range-picker/CDateRangePicker.js.map +1 -1
  76. package/dist/cjs/components/date-range-picker/index.js.map +1 -1
  77. package/dist/cjs/components/date-range-picker/utils.d.ts +16 -0
  78. package/dist/cjs/components/date-range-picker/utils.js +18 -5
  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 +3 -2
  206. package/dist/cjs/components/smart-table/CSmartTable.js +10 -0
  207. package/dist/cjs/components/smart-table/CSmartTable.js.map +1 -1
  208. package/dist/cjs/components/smart-table/CSmartTableBody.js.map +1 -1
  209. package/dist/cjs/components/smart-table/CSmartTableHead.d.ts +2 -0
  210. package/dist/cjs/components/smart-table/CSmartTableHead.js +8 -1
  211. package/dist/cjs/components/smart-table/CSmartTableHead.js.map +1 -1
  212. package/dist/cjs/components/smart-table/index.js.map +1 -1
  213. package/dist/cjs/components/smart-table/utils.js.map +1 -1
  214. package/dist/cjs/components/spinner/CSpinner.js.map +1 -1
  215. package/dist/cjs/components/spinner/index.js.map +1 -1
  216. package/dist/cjs/components/stepper/CStepper.js +0 -1
  217. package/dist/cjs/components/stepper/CStepper.js.map +1 -1
  218. package/dist/cjs/components/stepper/index.js.map +1 -1
  219. package/dist/cjs/components/table/CTable.js.map +1 -1
  220. package/dist/cjs/components/table/CTableBody.js.map +1 -1
  221. package/dist/cjs/components/table/CTableCaption.js.map +1 -1
  222. package/dist/cjs/components/table/CTableDataCell.js.map +1 -1
  223. package/dist/cjs/components/table/CTableFoot.js.map +1 -1
  224. package/dist/cjs/components/table/CTableHead.js.map +1 -1
  225. package/dist/cjs/components/table/CTableHeaderCell.js.map +1 -1
  226. package/dist/cjs/components/table/CTableRow.js.map +1 -1
  227. package/dist/cjs/components/table/index.js.map +1 -1
  228. package/dist/cjs/components/table/utils.js.map +1 -1
  229. package/dist/cjs/components/tabs/CTab.js.map +1 -1
  230. package/dist/cjs/components/tabs/CTabContent.js.map +1 -1
  231. package/dist/cjs/components/tabs/CTabList.js.map +1 -1
  232. package/dist/cjs/components/tabs/CTabPane.js.map +1 -1
  233. package/dist/cjs/components/tabs/CTabPanel.js.map +1 -1
  234. package/dist/cjs/components/tabs/CTabs.js.map +1 -1
  235. package/dist/cjs/components/tabs/index.js.map +1 -1
  236. package/dist/cjs/components/time-picker/CTimePicker.d.ts +5 -5
  237. package/dist/cjs/components/time-picker/CTimePicker.js +14 -1
  238. package/dist/cjs/components/time-picker/CTimePicker.js.map +1 -1
  239. package/dist/cjs/components/time-picker/CTimePickerRollCol.js.map +1 -1
  240. package/dist/cjs/components/time-picker/index.js.map +1 -1
  241. package/dist/cjs/components/time-picker/utils.js.map +1 -1
  242. package/dist/cjs/components/toast/CToast.js.map +1 -1
  243. package/dist/cjs/components/toast/CToastBody.js.map +1 -1
  244. package/dist/cjs/components/toast/CToastClose.js.map +1 -1
  245. package/dist/cjs/components/toast/CToastHeader.js.map +1 -1
  246. package/dist/cjs/components/toast/CToaster.js.map +1 -1
  247. package/dist/cjs/components/toast/index.js.map +1 -1
  248. package/dist/cjs/components/tooltip/CTooltip.d.ts +1 -1
  249. package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
  250. package/dist/cjs/components/tooltip/index.js.map +1 -1
  251. package/dist/cjs/components/virtual-scroller/CVirtualScroller.js.map +1 -1
  252. package/dist/cjs/components/virtual-scroller/index.js.map +1 -1
  253. package/dist/cjs/components/widgets/CWidgetStatsA.js.map +1 -1
  254. package/dist/cjs/components/widgets/CWidgetStatsB.js.map +1 -1
  255. package/dist/cjs/components/widgets/CWidgetStatsC.js.map +1 -1
  256. package/dist/cjs/components/widgets/CWidgetStatsD.js.map +1 -1
  257. package/dist/cjs/components/widgets/CWidgetStatsE.js.map +1 -1
  258. package/dist/cjs/components/widgets/CWidgetStatsF.js.map +1 -1
  259. package/dist/cjs/components/widgets/index.js.map +1 -1
  260. package/dist/cjs/composables/useColorModes.js.map +1 -1
  261. package/dist/cjs/composables/useDebouncedCallback.js.map +1 -1
  262. package/dist/cjs/composables/useDropdownWithPopper.js.map +1 -1
  263. package/dist/cjs/composables/useIsVisible.js.map +1 -1
  264. package/dist/cjs/composables/usePopper.js.map +1 -1
  265. package/dist/cjs/composables/useUniqueId.js.map +1 -1
  266. package/dist/cjs/directives/v-c-placeholder.js.map +1 -1
  267. package/dist/cjs/directives/v-c-popover.js.map +1 -1
  268. package/dist/cjs/directives/v-c-tooltip.js.map +1 -1
  269. package/dist/cjs/directives/v-c-visible.js.map +1 -1
  270. package/dist/cjs/index.js +110 -106
  271. package/dist/cjs/index.js.map +1 -1
  272. package/dist/cjs/node_modules/@coreui/icons-vue/dist/index.es.js.map +1 -1
  273. package/dist/cjs/node_modules/vue-types/dist/index.js.map +1 -1
  274. package/dist/cjs/node_modules/vue-types/dist/shared/vue-types.8139b772.js.map +1 -1
  275. package/dist/cjs/props.js.map +1 -1
  276. package/dist/cjs/utils/getNextActiveElement.js.map +1 -1
  277. package/dist/cjs/utils/getNextSibling.d.ts +2 -0
  278. package/dist/cjs/utils/getNextSibling.js +23 -0
  279. package/dist/cjs/utils/getNextSibling.js.map +1 -0
  280. package/dist/cjs/utils/getPreviousSibling.d.ts +2 -0
  281. package/dist/cjs/utils/getPreviousSibling.js +22 -0
  282. package/dist/cjs/utils/getPreviousSibling.js.map +1 -0
  283. package/dist/cjs/utils/getRTLPlacement.js.map +1 -1
  284. package/dist/cjs/utils/index.d.ts +3 -1
  285. package/dist/cjs/utils/isEqual.js.map +1 -1
  286. package/dist/cjs/utils/isObjectInArray.js.map +1 -1
  287. package/dist/cjs/utils/isRTL.js.map +1 -1
  288. package/dist/cjs/utils/transition.js.map +1 -1
  289. package/dist/esm/components/accordion/CAccordion.js.map +1 -1
  290. package/dist/esm/components/accordion/CAccordionBody.js.map +1 -1
  291. package/dist/esm/components/accordion/CAccordionButton.js.map +1 -1
  292. package/dist/esm/components/accordion/CAccordionHeader.js.map +1 -1
  293. package/dist/esm/components/accordion/CAccordionItem.js.map +1 -1
  294. package/dist/esm/components/accordion/index.js.map +1 -1
  295. package/dist/esm/components/alert/CAlert.js.map +1 -1
  296. package/dist/esm/components/alert/CAlertHeading.js.map +1 -1
  297. package/dist/esm/components/alert/CAlertLink.js.map +1 -1
  298. package/dist/esm/components/alert/index.js.map +1 -1
  299. package/dist/esm/components/autocomplete/CAutocomplete.d.ts +594 -0
  300. package/dist/esm/components/autocomplete/CAutocomplete.js +722 -0
  301. package/dist/esm/components/autocomplete/CAutocomplete.js.map +1 -0
  302. package/dist/esm/components/autocomplete/CAutocompleteOptions.d.ts +50 -0
  303. package/dist/esm/components/autocomplete/CAutocompleteOptions.js +114 -0
  304. package/dist/esm/components/autocomplete/CAutocompleteOptions.js.map +1 -0
  305. package/dist/esm/components/autocomplete/index.d.ts +6 -0
  306. package/dist/esm/components/autocomplete/index.js +10 -0
  307. package/dist/esm/components/autocomplete/index.js.map +1 -0
  308. package/dist/esm/components/autocomplete/types.d.ts +18 -0
  309. package/dist/esm/components/autocomplete/utils.d.ts +11 -0
  310. package/dist/esm/components/autocomplete/utils.js +87 -0
  311. package/dist/esm/components/autocomplete/utils.js.map +1 -0
  312. package/dist/esm/components/avatar/CAvatar.js.map +1 -1
  313. package/dist/esm/components/avatar/index.js.map +1 -1
  314. package/dist/esm/components/backdrop/CBackdrop.js.map +1 -1
  315. package/dist/esm/components/backdrop/index.js.map +1 -1
  316. package/dist/esm/components/badge/CBadge.js.map +1 -1
  317. package/dist/esm/components/badge/index.js.map +1 -1
  318. package/dist/esm/components/breadcrumb/CBreadcrumb.js.map +1 -1
  319. package/dist/esm/components/breadcrumb/CBreadcrumbItem.js.map +1 -1
  320. package/dist/esm/components/breadcrumb/index.js.map +1 -1
  321. package/dist/esm/components/button/CButton.js +2 -1
  322. package/dist/esm/components/button/CButton.js.map +1 -1
  323. package/dist/esm/components/button/index.js.map +1 -1
  324. package/dist/esm/components/button-group/CButtonGroup.js.map +1 -1
  325. package/dist/esm/components/button-group/CButtonToolbar.js.map +1 -1
  326. package/dist/esm/components/button-group/index.js.map +1 -1
  327. package/dist/esm/components/calendar/CCalendar.js +5 -7
  328. package/dist/esm/components/calendar/CCalendar.js.map +1 -1
  329. package/dist/esm/components/calendar/index.js.map +1 -1
  330. package/dist/esm/components/calendar/utils.d.ts +20 -6
  331. package/dist/esm/components/calendar/utils.js +23 -9
  332. package/dist/esm/components/calendar/utils.js.map +1 -1
  333. package/dist/esm/components/callout/CCallout.js.map +1 -1
  334. package/dist/esm/components/callout/index.js.map +1 -1
  335. package/dist/esm/components/card/CCard.js.map +1 -1
  336. package/dist/esm/components/card/CCardBody.js.map +1 -1
  337. package/dist/esm/components/card/CCardFooter.js.map +1 -1
  338. package/dist/esm/components/card/CCardGroup.js.map +1 -1
  339. package/dist/esm/components/card/CCardHeader.js.map +1 -1
  340. package/dist/esm/components/card/CCardImage.js.map +1 -1
  341. package/dist/esm/components/card/CCardImageOverlay.js.map +1 -1
  342. package/dist/esm/components/card/CCardLink.js.map +1 -1
  343. package/dist/esm/components/card/CCardSubtitle.js.map +1 -1
  344. package/dist/esm/components/card/CCardText.js.map +1 -1
  345. package/dist/esm/components/card/CCardTitle.js.map +1 -1
  346. package/dist/esm/components/card/index.js.map +1 -1
  347. package/dist/esm/components/carousel/CCarousel.js.map +1 -1
  348. package/dist/esm/components/carousel/CCarouselCaption.js.map +1 -1
  349. package/dist/esm/components/carousel/CCarouselItem.js.map +1 -1
  350. package/dist/esm/components/carousel/index.js.map +1 -1
  351. package/dist/esm/components/close-button/CCloseButton.js.map +1 -1
  352. package/dist/esm/components/close-button/index.js.map +1 -1
  353. package/dist/esm/components/collapse/CCollapse.js.map +1 -1
  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.d.ts +16 -0
  365. package/dist/esm/components/date-range-picker/utils.js +18 -5
  366. package/dist/esm/components/date-range-picker/utils.js.map +1 -1
  367. package/dist/esm/components/dropdown/CDropdown.d.ts +1 -1
  368. package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
  369. package/dist/esm/components/dropdown/CDropdownDivider.js.map +1 -1
  370. package/dist/esm/components/dropdown/CDropdownHeader.js.map +1 -1
  371. package/dist/esm/components/dropdown/CDropdownItem.js.map +1 -1
  372. package/dist/esm/components/dropdown/CDropdownMenu.js.map +1 -1
  373. package/dist/esm/components/dropdown/CDropdownToggle.d.ts +1 -1
  374. package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
  375. package/dist/esm/components/dropdown/index.js.map +1 -1
  376. package/dist/esm/components/dropdown/utils.js.map +1 -1
  377. package/dist/esm/components/element-cover/CElementCover.js.map +1 -1
  378. package/dist/esm/components/element-cover/index.js.map +1 -1
  379. package/dist/esm/components/footer/CFooter.js.map +1 -1
  380. package/dist/esm/components/footer/index.js.map +1 -1
  381. package/dist/esm/components/form/CForm.js.map +1 -1
  382. package/dist/esm/components/form/CFormCheck.js.map +1 -1
  383. package/dist/esm/components/form/CFormControlValidation.js.map +1 -1
  384. package/dist/esm/components/form/CFormControlWrapper.js.map +1 -1
  385. package/dist/esm/components/form/CFormFeedback.js.map +1 -1
  386. package/dist/esm/components/form/CFormFloating.js.map +1 -1
  387. package/dist/esm/components/form/CFormInput.js.map +1 -1
  388. package/dist/esm/components/form/CFormLabel.js.map +1 -1
  389. package/dist/esm/components/form/CFormRange.js.map +1 -1
  390. package/dist/esm/components/form/CFormSelect.js.map +1 -1
  391. package/dist/esm/components/form/CFormSwitch.js.map +1 -1
  392. package/dist/esm/components/form/CFormText.js.map +1 -1
  393. package/dist/esm/components/form/CFormTextarea.js.map +1 -1
  394. package/dist/esm/components/form/CInputGroup.js.map +1 -1
  395. package/dist/esm/components/form/CInputGroupText.js.map +1 -1
  396. package/dist/esm/components/form/index.js.map +1 -1
  397. package/dist/esm/components/grid/CCol.js.map +1 -1
  398. package/dist/esm/components/grid/CContainer.d.ts +1 -1
  399. package/dist/esm/components/grid/CContainer.js.map +1 -1
  400. package/dist/esm/components/grid/CRow.js.map +1 -1
  401. package/dist/esm/components/grid/index.js.map +1 -1
  402. package/dist/esm/components/header/CHeader.js.map +1 -1
  403. package/dist/esm/components/header/CHeaderBrand.js.map +1 -1
  404. package/dist/esm/components/header/CHeaderDivider.js.map +1 -1
  405. package/dist/esm/components/header/CHeaderNav.js.map +1 -1
  406. package/dist/esm/components/header/CHeaderText.js.map +1 -1
  407. package/dist/esm/components/header/CHeaderToggler.js.map +1 -1
  408. package/dist/esm/components/header/index.js.map +1 -1
  409. package/dist/esm/components/image/CImage.js.map +1 -1
  410. package/dist/esm/components/image/index.js.map +1 -1
  411. package/dist/esm/components/index.d.ts +1 -0
  412. package/dist/esm/components/index.js +2 -0
  413. package/dist/esm/components/index.js.map +1 -1
  414. package/dist/esm/components/link/CLink.js.map +1 -1
  415. package/dist/esm/components/link/index.js.map +1 -1
  416. package/dist/esm/components/list-group/CListGroup.js.map +1 -1
  417. package/dist/esm/components/list-group/CListGroupItem.js.map +1 -1
  418. package/dist/esm/components/list-group/index.js.map +1 -1
  419. package/dist/esm/components/loading-button/CLoadingButton.js.map +1 -1
  420. package/dist/esm/components/loading-button/index.js.map +1 -1
  421. package/dist/esm/components/modal/CModal.js.map +1 -1
  422. package/dist/esm/components/modal/CModalBody.js.map +1 -1
  423. package/dist/esm/components/modal/CModalFooter.js.map +1 -1
  424. package/dist/esm/components/modal/CModalHeader.js.map +1 -1
  425. package/dist/esm/components/modal/CModalTitle.js.map +1 -1
  426. package/dist/esm/components/modal/index.js.map +1 -1
  427. package/dist/esm/components/multi-select/CMultiSelect.d.ts +30 -11
  428. package/dist/esm/components/multi-select/CMultiSelect.js +165 -144
  429. package/dist/esm/components/multi-select/CMultiSelect.js.map +1 -1
  430. package/dist/esm/components/multi-select/CMultiSelectNativeSelect.d.ts +1 -1
  431. package/dist/esm/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
  432. package/dist/esm/components/multi-select/CMultiSelectOptions.d.ts +2 -2
  433. package/dist/esm/components/multi-select/CMultiSelectOptions.js +4 -1
  434. package/dist/esm/components/multi-select/CMultiSelectOptions.js.map +1 -1
  435. package/dist/esm/components/multi-select/CMultiSelectSelection.d.ts +1 -1
  436. package/dist/esm/components/multi-select/CMultiSelectSelection.js.map +1 -1
  437. package/dist/esm/components/multi-select/index.js.map +1 -1
  438. package/dist/esm/components/multi-select/utils.d.ts +0 -2
  439. package/dist/esm/components/multi-select/utils.js +1 -25
  440. package/dist/esm/components/multi-select/utils.js.map +1 -1
  441. package/dist/esm/components/nav/CNav.js.map +1 -1
  442. package/dist/esm/components/nav/CNavGroup.js.map +1 -1
  443. package/dist/esm/components/nav/CNavGroupItems.js.map +1 -1
  444. package/dist/esm/components/nav/CNavItem.js.map +1 -1
  445. package/dist/esm/components/nav/CNavLink.js.map +1 -1
  446. package/dist/esm/components/nav/CNavTitle.js.map +1 -1
  447. package/dist/esm/components/nav/index.js.map +1 -1
  448. package/dist/esm/components/navbar/CNavbar.js.map +1 -1
  449. package/dist/esm/components/navbar/CNavbarBrand.js.map +1 -1
  450. package/dist/esm/components/navbar/CNavbarNav.js.map +1 -1
  451. package/dist/esm/components/navbar/CNavbarText.js.map +1 -1
  452. package/dist/esm/components/navbar/CNavbarToggler.js.map +1 -1
  453. package/dist/esm/components/navbar/index.js.map +1 -1
  454. package/dist/esm/components/offcanvas/COffcanvas.js.map +1 -1
  455. package/dist/esm/components/offcanvas/COffcanvasBody.js.map +1 -1
  456. package/dist/esm/components/offcanvas/COffcanvasHeader.js.map +1 -1
  457. package/dist/esm/components/offcanvas/COffcanvasTitle.js.map +1 -1
  458. package/dist/esm/components/offcanvas/index.js.map +1 -1
  459. package/dist/esm/components/pagination/CPagination.js.map +1 -1
  460. package/dist/esm/components/pagination/CPaginationItem.js.map +1 -1
  461. package/dist/esm/components/pagination/index.js.map +1 -1
  462. package/dist/esm/components/password-input/CPasswordInput.js.map +1 -1
  463. package/dist/esm/components/password-input/index.js.map +1 -1
  464. package/dist/esm/components/picker/CPicker.js.map +1 -1
  465. package/dist/esm/components/picker/index.js.map +1 -1
  466. package/dist/esm/components/placeholder/CPlaceholder.js.map +1 -1
  467. package/dist/esm/components/placeholder/index.js.map +1 -1
  468. package/dist/esm/components/popover/CPopover.d.ts +1 -1
  469. package/dist/esm/components/popover/CPopover.js.map +1 -1
  470. package/dist/esm/components/popover/index.js.map +1 -1
  471. package/dist/esm/components/progress/CProgress.js.map +1 -1
  472. package/dist/esm/components/progress/CProgressBar.js.map +1 -1
  473. package/dist/esm/components/progress/CProgressStacked.js.map +1 -1
  474. package/dist/esm/components/progress/index.js.map +1 -1
  475. package/dist/esm/components/props.js.map +1 -1
  476. package/dist/esm/components/range-slider/CRangeSlider.js.map +1 -1
  477. package/dist/esm/components/range-slider/index.js.map +1 -1
  478. package/dist/esm/components/range-slider/utils.js.map +1 -1
  479. package/dist/esm/components/rating/CRating.d.ts +1 -1
  480. package/dist/esm/components/rating/CRating.js.map +1 -1
  481. package/dist/esm/components/rating/index.js.map +1 -1
  482. package/dist/esm/components/sidebar/CSidebar.d.ts +1 -1
  483. package/dist/esm/components/sidebar/CSidebar.js.map +1 -1
  484. package/dist/esm/components/sidebar/CSidebarBrand.js.map +1 -1
  485. package/dist/esm/components/sidebar/CSidebarFooter.js.map +1 -1
  486. package/dist/esm/components/sidebar/CSidebarHeader.js.map +1 -1
  487. package/dist/esm/components/sidebar/CSidebarNav.js.map +1 -1
  488. package/dist/esm/components/sidebar/CSidebarToggler.js.map +1 -1
  489. package/dist/esm/components/sidebar/index.js.map +1 -1
  490. package/dist/esm/components/smart-pagination/CSmartPagination.js.map +1 -1
  491. package/dist/esm/components/smart-pagination/index.js.map +1 -1
  492. package/dist/esm/components/smart-table/CSmartTable.d.ts +3 -2
  493. package/dist/esm/components/smart-table/CSmartTable.js +10 -0
  494. package/dist/esm/components/smart-table/CSmartTable.js.map +1 -1
  495. package/dist/esm/components/smart-table/CSmartTableBody.js.map +1 -1
  496. package/dist/esm/components/smart-table/CSmartTableHead.d.ts +2 -0
  497. package/dist/esm/components/smart-table/CSmartTableHead.js +8 -1
  498. package/dist/esm/components/smart-table/CSmartTableHead.js.map +1 -1
  499. package/dist/esm/components/smart-table/index.js.map +1 -1
  500. package/dist/esm/components/smart-table/utils.js.map +1 -1
  501. package/dist/esm/components/spinner/CSpinner.js.map +1 -1
  502. package/dist/esm/components/spinner/index.js.map +1 -1
  503. package/dist/esm/components/stepper/CStepper.js +0 -1
  504. package/dist/esm/components/stepper/CStepper.js.map +1 -1
  505. package/dist/esm/components/stepper/index.js.map +1 -1
  506. package/dist/esm/components/table/CTable.js.map +1 -1
  507. package/dist/esm/components/table/CTableBody.js.map +1 -1
  508. package/dist/esm/components/table/CTableCaption.js.map +1 -1
  509. package/dist/esm/components/table/CTableDataCell.js.map +1 -1
  510. package/dist/esm/components/table/CTableFoot.js.map +1 -1
  511. package/dist/esm/components/table/CTableHead.js.map +1 -1
  512. package/dist/esm/components/table/CTableHeaderCell.js.map +1 -1
  513. package/dist/esm/components/table/CTableRow.js.map +1 -1
  514. package/dist/esm/components/table/index.js.map +1 -1
  515. package/dist/esm/components/table/utils.js.map +1 -1
  516. package/dist/esm/components/tabs/CTab.js.map +1 -1
  517. package/dist/esm/components/tabs/CTabContent.js.map +1 -1
  518. package/dist/esm/components/tabs/CTabList.js.map +1 -1
  519. package/dist/esm/components/tabs/CTabPane.js.map +1 -1
  520. package/dist/esm/components/tabs/CTabPanel.js.map +1 -1
  521. package/dist/esm/components/tabs/CTabs.js.map +1 -1
  522. package/dist/esm/components/tabs/index.js.map +1 -1
  523. package/dist/esm/components/time-picker/CTimePicker.d.ts +5 -5
  524. package/dist/esm/components/time-picker/CTimePicker.js +14 -1
  525. package/dist/esm/components/time-picker/CTimePicker.js.map +1 -1
  526. package/dist/esm/components/time-picker/CTimePickerRollCol.js.map +1 -1
  527. package/dist/esm/components/time-picker/index.js.map +1 -1
  528. package/dist/esm/components/time-picker/utils.js.map +1 -1
  529. package/dist/esm/components/toast/CToast.js.map +1 -1
  530. package/dist/esm/components/toast/CToastBody.js.map +1 -1
  531. package/dist/esm/components/toast/CToastClose.js.map +1 -1
  532. package/dist/esm/components/toast/CToastHeader.js.map +1 -1
  533. package/dist/esm/components/toast/CToaster.js.map +1 -1
  534. package/dist/esm/components/toast/index.js.map +1 -1
  535. package/dist/esm/components/tooltip/CTooltip.d.ts +1 -1
  536. package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
  537. package/dist/esm/components/tooltip/index.js.map +1 -1
  538. package/dist/esm/components/virtual-scroller/CVirtualScroller.js.map +1 -1
  539. package/dist/esm/components/virtual-scroller/index.js.map +1 -1
  540. package/dist/esm/components/widgets/CWidgetStatsA.js.map +1 -1
  541. package/dist/esm/components/widgets/CWidgetStatsB.js.map +1 -1
  542. package/dist/esm/components/widgets/CWidgetStatsC.js.map +1 -1
  543. package/dist/esm/components/widgets/CWidgetStatsD.js.map +1 -1
  544. package/dist/esm/components/widgets/CWidgetStatsE.js.map +1 -1
  545. package/dist/esm/components/widgets/CWidgetStatsF.js.map +1 -1
  546. package/dist/esm/components/widgets/index.js.map +1 -1
  547. package/dist/esm/composables/useColorModes.js.map +1 -1
  548. package/dist/esm/composables/useDebouncedCallback.js.map +1 -1
  549. package/dist/esm/composables/useDropdownWithPopper.js.map +1 -1
  550. package/dist/esm/composables/useIsVisible.js.map +1 -1
  551. package/dist/esm/composables/usePopper.js.map +1 -1
  552. package/dist/esm/composables/useUniqueId.js.map +1 -1
  553. package/dist/esm/directives/v-c-placeholder.js.map +1 -1
  554. package/dist/esm/directives/v-c-popover.js.map +1 -1
  555. package/dist/esm/directives/v-c-tooltip.js.map +1 -1
  556. package/dist/esm/directives/v-c-visible.js.map +1 -1
  557. package/dist/esm/index.js +2 -0
  558. package/dist/esm/index.js.map +1 -1
  559. package/dist/esm/node_modules/@coreui/icons-vue/dist/index.es.js.map +1 -1
  560. package/dist/esm/node_modules/vue-types/dist/index.js.map +1 -1
  561. package/dist/esm/node_modules/vue-types/dist/shared/vue-types.8139b772.js.map +1 -1
  562. package/dist/esm/props.js.map +1 -1
  563. package/dist/esm/utils/getNextActiveElement.js.map +1 -1
  564. package/dist/esm/utils/getNextSibling.d.ts +2 -0
  565. package/dist/esm/utils/getNextSibling.js +18 -0
  566. package/dist/esm/utils/getNextSibling.js.map +1 -0
  567. package/dist/esm/utils/getPreviousSibling.d.ts +2 -0
  568. package/dist/esm/utils/getPreviousSibling.js +18 -0
  569. package/dist/esm/utils/getPreviousSibling.js.map +1 -0
  570. package/dist/esm/utils/getRTLPlacement.js.map +1 -1
  571. package/dist/esm/utils/index.d.ts +3 -1
  572. package/dist/esm/utils/isEqual.js.map +1 -1
  573. package/dist/esm/utils/isObjectInArray.js.map +1 -1
  574. package/dist/esm/utils/isRTL.js.map +1 -1
  575. package/dist/esm/utils/transition.js.map +1 -1
  576. package/package.json +8 -8
  577. package/src/components/autocomplete/CAutocomplete.ts +855 -0
  578. package/src/components/autocomplete/CAutocompleteOptions.ts +144 -0
  579. package/src/components/autocomplete/__tests__/CAutocomplete.spec.ts +429 -0
  580. package/src/components/autocomplete/__tests__/CAutocompleteOptions.spec.ts +368 -0
  581. package/src/components/autocomplete/__tests__/__snapshots__/CAutocomplete.spec.ts.snap +39 -0
  582. package/src/components/autocomplete/index.ts +10 -0
  583. package/src/components/autocomplete/types.ts +25 -0
  584. package/src/components/autocomplete/utils.ts +131 -0
  585. package/src/components/button/CButton.ts +2 -1
  586. package/src/components/calendar/CCalendar.ts +6 -11
  587. package/src/components/calendar/utils.ts +29 -11
  588. package/src/components/date-range-picker/CDateRangePicker.ts +33 -28
  589. package/src/components/date-range-picker/utils.ts +26 -10
  590. package/src/components/index.ts +1 -0
  591. package/src/components/multi-select/CMultiSelect.ts +36 -16
  592. package/src/components/multi-select/CMultiSelectOptions.ts +5 -1
  593. package/src/components/multi-select/utils.ts +0 -34
  594. package/src/components/smart-table/CSmartTable.ts +61 -50
  595. package/src/components/smart-table/CSmartTableHead.ts +24 -17
  596. package/src/components/stepper/CStepper.ts +0 -2
  597. package/src/components/time-picker/CTimePicker.ts +13 -1
  598. package/src/utils/getNextSibling.ts +18 -0
  599. package/src/utils/getPreviousSibling.ts +18 -0
  600. package/src/utils/index.ts +4 -0
@@ -0,0 +1,144 @@
1
+ import { defineComponent, h, PropType } from 'vue'
2
+
3
+ import { CElementCover } from '../element-cover'
4
+ import { CVirtualScroller } from '../virtual-scroller'
5
+
6
+ import { getNextSibling, getPreviousSibling } from '../../utils'
7
+
8
+ import type { Option, OptionsGroup } from './types'
9
+ import { getOptionLabel, highlightSubstring, isOptionDisabled, isOptionSelected } from './utils'
10
+
11
+ const CAutocompleteOptions = defineComponent({
12
+ name: 'CAutocompleteOptions',
13
+ props: {
14
+ highlightOptionsOnSearch: Boolean,
15
+ loading: Boolean,
16
+ options: {
17
+ type: Array as PropType<(Option | OptionsGroup)[]>,
18
+ required: true,
19
+ },
20
+ optionsMaxHeight: [Number, String] as PropType<number | string>,
21
+ scopedSlots: Object,
22
+ searchNoResultsLabel: [Boolean, String] as PropType<boolean | string>,
23
+ searchValue: String,
24
+ selected: [Object, String, null] as PropType<Option | null>,
25
+ virtualScroller: Boolean,
26
+ visible: Boolean,
27
+ visibleItems: {
28
+ type: Number,
29
+ default: 10,
30
+ },
31
+ },
32
+ emits: ['optionClick'],
33
+ setup(props, { emit }) {
34
+ const handleKeyDown = (event: KeyboardEvent, option: Option) => {
35
+ if (event.code === 'Space' || event.key === 'Enter') {
36
+ event.preventDefault()
37
+ emit('optionClick', option)
38
+ }
39
+
40
+ if (event.key === 'Down' || event.key === 'ArrowDown') {
41
+ event.preventDefault()
42
+ const target = event.target as HTMLElement
43
+ const next = getNextSibling(
44
+ target,
45
+ '.autocomplete-option:not(.disabled):not(:disabled)'
46
+ ) as HTMLElement | null
47
+
48
+ if (next) {
49
+ next.focus()
50
+ }
51
+ }
52
+
53
+ if (event.key === 'Up' || event.key === 'ArrowUp') {
54
+ event.preventDefault()
55
+ const target = event.target as HTMLElement
56
+ const prev = getPreviousSibling(
57
+ target,
58
+ '.autocomplete-option:not(.disabled):not(:disabled)'
59
+ ) as HTMLElement | null
60
+
61
+ if (prev) {
62
+ prev.focus()
63
+ }
64
+ }
65
+ }
66
+
67
+ const createOption = (option: Option, index: number) =>
68
+ h(
69
+ 'div',
70
+ {
71
+ class: [
72
+ 'autocomplete-option',
73
+ {
74
+ disabled: isOptionDisabled(option),
75
+ selected: isOptionSelected(option, props.selected || null),
76
+ },
77
+ ],
78
+ key: index,
79
+ onClick: () => emit('optionClick', option),
80
+ onKeydown: (event: KeyboardEvent) => handleKeyDown(event, option),
81
+ tabindex: 0,
82
+ ...(props.highlightOptionsOnSearch &&
83
+ !props.scopedSlots?.['options'] && {
84
+ innerHTML: highlightSubstring(getOptionLabel(option), props.searchValue),
85
+ }),
86
+ },
87
+ !props.highlightOptionsOnSearch
88
+ ? props.scopedSlots && props.scopedSlots['options']
89
+ ? h(props.scopedSlots['options'], { option: option })
90
+ : getOptionLabel(option)
91
+ : undefined
92
+ )
93
+
94
+ const createOptions = (options: (Option | OptionsGroup)[]) => {
95
+ if (options.length === 0 && props.searchNoResultsLabel) {
96
+ return h('div', { class: 'autocomplete-options-empty' }, props.searchNoResultsLabel)
97
+ }
98
+
99
+ return options.map((option: Option | OptionsGroup, index: number) => {
100
+ if (typeof option !== 'string' && 'options' in option) {
101
+ return h('div', { key: index }, [
102
+ h('div', { class: 'autocomplete-optgroup-label' }, [
103
+ props.scopedSlots && props.scopedSlots['options-groups']
104
+ ? h(props.scopedSlots['options-groups'], { option: option })
105
+ : option.label,
106
+ ]),
107
+ ...(option.options?.map((opt: Option, idx: number) => createOption(opt, idx)) || []),
108
+ ])
109
+ }
110
+
111
+ return createOption(option as Option, index)
112
+ })
113
+ }
114
+
115
+ return () => [
116
+ props.visible && props.virtualScroller && props.options.length > 0
117
+ ? h(
118
+ CVirtualScroller,
119
+ {
120
+ class: 'autocomplete-options',
121
+ visibleItems: props.visibleItems,
122
+ role: 'listbox',
123
+ },
124
+ {
125
+ default: () => createOptions(props.options),
126
+ }
127
+ )
128
+ : h(
129
+ 'div',
130
+ {
131
+ class: 'autocomplete-options',
132
+ ...(props.optionsMaxHeight !== 'auto' && {
133
+ style: { maxHeight: props.optionsMaxHeight, overflow: 'scroll' },
134
+ }),
135
+ role: 'listbox',
136
+ },
137
+ createOptions(props.options)
138
+ ),
139
+ props.loading && h(CElementCover),
140
+ ]
141
+ },
142
+ })
143
+
144
+ export { CAutocompleteOptions }
@@ -0,0 +1,429 @@
1
+ import { mount, flushPromises } from '@vue/test-utils'
2
+ import { nextTick } from 'vue'
3
+ import { CAutocomplete } from '../CAutocomplete'
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('CAutocomplete', () => {
30
+ test('loads and displays CAutocomplete component', async () => {
31
+ const wrapper = mount(CAutocomplete, {
32
+ props: {
33
+ options: mockOptions,
34
+ },
35
+ })
36
+ expect(wrapper.html()).toMatchSnapshot()
37
+ })
38
+
39
+ test('CAutocomplete customize', async () => {
40
+ const wrapper = mount(CAutocomplete, {
41
+ props: {
42
+ className: 'bazinga',
43
+ disabled: true,
44
+ size: 'lg',
45
+ placeholder: 'Select option',
46
+ options: mockOptions,
47
+ cleaner: true,
48
+ indicator: true,
49
+ },
50
+ })
51
+ expect(wrapper.html()).toMatchSnapshot()
52
+ expect(wrapper.find('.autocomplete').classes()).toContain('bazinga')
53
+ expect(wrapper.find('.autocomplete').classes()).toContain('autocomplete-lg')
54
+ expect(wrapper.find('.autocomplete').classes()).toContain('disabled')
55
+ })
56
+
57
+ test('CAutocomplete renders input with placeholder', async () => {
58
+ const wrapper = mount(CAutocomplete, {
59
+ props: {
60
+ options: mockOptions,
61
+ placeholder: 'Type to search...',
62
+ },
63
+ })
64
+ const input = wrapper.find('input[role="combobox"]')
65
+ expect(input.attributes('placeholder')).toBe('Type to search...')
66
+ })
67
+
68
+ test('CAutocomplete opens dropdown on input click', async () => {
69
+ const wrapper = mount(CAutocomplete, {
70
+ props: {
71
+ options: mockOptions,
72
+ },
73
+ })
74
+ const input = wrapper.find('input[role="combobox"]')
75
+
76
+ await input.trigger('click')
77
+ await flushPromises()
78
+
79
+ const listbox = wrapper.find('[role="listbox"]')
80
+ expect(listbox.exists()).toBe(true)
81
+ expect(wrapper.find('.autocomplete').classes()).toContain('show')
82
+ })
83
+
84
+ test('CAutocomplete filters options on input change', async () => {
85
+ const wrapper = mount(CAutocomplete, {
86
+ props: {
87
+ options: mockOptions,
88
+ },
89
+ })
90
+ const input = wrapper.find('input[role="combobox"]')
91
+
92
+ await input.setValue('app')
93
+ await input.trigger('input')
94
+ await flushPromises()
95
+
96
+ expect(wrapper.text()).toContain('Apple')
97
+ expect(wrapper.text()).not.toContain('Banana')
98
+ })
99
+
100
+ test('CAutocomplete selects option on click', async () => {
101
+ const wrapper = mount(CAutocomplete, {
102
+ props: {
103
+ options: mockOptions,
104
+ },
105
+ })
106
+
107
+ const input = wrapper.find('input[role="combobox"]')
108
+ await input.trigger('click')
109
+ await flushPromises()
110
+
111
+ const option = wrapper.find('.autocomplete-option')
112
+ await option.trigger('click')
113
+ await flushPromises()
114
+
115
+ expect(wrapper.emitted('change')).toBeTruthy()
116
+ expect(wrapper.emitted('change')![0]).toEqual([mockOptions[0]])
117
+ })
118
+
119
+ test('CAutocomplete selects option on Enter key', async () => {
120
+ const wrapper = mount(CAutocomplete, {
121
+ props: {
122
+ options: mockOptions,
123
+ },
124
+ })
125
+
126
+ const input = wrapper.find('input[role="combobox"]')
127
+ await input.setValue('Apple')
128
+ await input.trigger('input')
129
+ await input.trigger('keydown', { key: 'Enter' })
130
+ await flushPromises()
131
+
132
+ expect(wrapper.emitted('change')).toBeTruthy()
133
+ expect(wrapper.emitted('change')![0]).toEqual([mockOptions[0]])
134
+ })
135
+
136
+ test('CAutocomplete closes dropdown on Escape key', async () => {
137
+ const wrapper = mount(CAutocomplete, {
138
+ props: {
139
+ options: mockOptions,
140
+ },
141
+ })
142
+ const input = wrapper.find('input[role="combobox"]')
143
+
144
+ await input.trigger('click')
145
+ await flushPromises()
146
+
147
+ expect(wrapper.find('.autocomplete').classes()).toContain('show')
148
+
149
+ await input.trigger('keydown', { key: 'Escape' })
150
+ await flushPromises()
151
+
152
+ expect(input.attributes('aria-expanded')).toBe('false')
153
+ expect(wrapper.find('.autocomplete').classes()).not.toContain('show')
154
+ })
155
+
156
+ test('CAutocomplete navigates options with arrow keys', async () => {
157
+ const wrapper = mount(CAutocomplete, {
158
+ props: {
159
+ options: mockOptions,
160
+ },
161
+ attachTo: document.body,
162
+ })
163
+ const input = wrapper.find('input[role="combobox"]')
164
+
165
+ await input.trigger('click')
166
+ await flushPromises()
167
+
168
+ expect(wrapper.find('[role="listbox"]').exists()).toBe(true)
169
+
170
+ await input.trigger('keydown', { key: 'ArrowDown' })
171
+ await nextTick()
172
+
173
+ const firstOption = wrapper.find('.autocomplete-option')
174
+ expect(firstOption.exists()).toBe(true)
175
+ })
176
+
177
+ test('CAutocomplete shows cleaner button when option selected', async () => {
178
+ const wrapper = mount(CAutocomplete, {
179
+ props: {
180
+ options: mockOptions,
181
+ cleaner: true,
182
+ value: 1,
183
+ },
184
+ })
185
+
186
+ await flushPromises()
187
+
188
+ const cleanerButton = wrapper.find('.autocomplete-cleaner')
189
+ expect(cleanerButton.exists()).toBe(true)
190
+ })
191
+
192
+ test('CAutocomplete clears selection when cleaner clicked', async () => {
193
+ const wrapper = mount(CAutocomplete, {
194
+ props: {
195
+ options: mockOptions,
196
+ cleaner: true,
197
+ value: 1,
198
+ },
199
+ })
200
+
201
+ await flushPromises()
202
+
203
+ const cleanerButton = wrapper.find('.autocomplete-cleaner')
204
+ await cleanerButton.trigger('click')
205
+ await flushPromises()
206
+
207
+ expect(wrapper.emitted('change')).toBeTruthy()
208
+ expect(wrapper.emitted('change')![0]).toEqual([null])
209
+ })
210
+
211
+ test('CAutocomplete shows no results message', async () => {
212
+ const wrapper = mount(CAutocomplete, {
213
+ props: {
214
+ options: mockOptions,
215
+ searchNoResultsLabel: 'No options found',
216
+ },
217
+ })
218
+
219
+ const input = wrapper.find('input[role="combobox"]')
220
+ await input.setValue('xyz')
221
+ await input.trigger('input')
222
+ await flushPromises()
223
+
224
+ expect(wrapper.text()).toContain('No options found')
225
+ })
226
+
227
+ test('CAutocomplete renders option groups', async () => {
228
+ const wrapper = mount(CAutocomplete, {
229
+ props: {
230
+ options: mockOptionsWithGroups,
231
+ },
232
+ })
233
+
234
+ const input = wrapper.find('input[role="combobox"]')
235
+ await input.trigger('click')
236
+ await flushPromises()
237
+
238
+ expect(wrapper.text()).toContain('Fruits')
239
+ expect(wrapper.text()).toContain('Vegetables')
240
+ expect(wrapper.text()).toContain('Apple')
241
+ expect(wrapper.text()).toContain('Carrot')
242
+ })
243
+
244
+ test('CAutocomplete shows hint when enabled', async () => {
245
+ const wrapper = mount(CAutocomplete, {
246
+ props: {
247
+ options: mockOptions,
248
+ showHints: true,
249
+ },
250
+ })
251
+
252
+ const input = wrapper.find('input[role="combobox"]')
253
+ await input.setValue('ap')
254
+ await input.trigger('input')
255
+ await flushPromises()
256
+
257
+ const hintInput = wrapper.find('.autocomplete-input-hint')
258
+ expect(hintInput.exists()).toBe(true)
259
+ })
260
+
261
+ test('CAutocomplete allows custom values when allowOnlyDefinedOptions is false', async () => {
262
+ const wrapper = mount(CAutocomplete, {
263
+ props: {
264
+ options: mockOptions,
265
+ allowOnlyDefinedOptions: false,
266
+ },
267
+ })
268
+
269
+ const input = wrapper.find('input[role="combobox"]')
270
+ await input.setValue('Custom Value')
271
+ await input.trigger('input')
272
+ await input.trigger('keydown', { key: 'Enter' })
273
+ await flushPromises()
274
+
275
+ expect(wrapper.emitted('change')).toBeTruthy()
276
+ expect(wrapper.emitted('change')![0]).toEqual(['Custom Value'])
277
+ })
278
+
279
+ test('CAutocomplete prevents custom values when allowOnlyDefinedOptions is true', async () => {
280
+ const wrapper = mount(CAutocomplete, {
281
+ props: {
282
+ options: mockOptions,
283
+ allowOnlyDefinedOptions: true,
284
+ },
285
+ })
286
+
287
+ const input = wrapper.find('input[role="combobox"]')
288
+ await input.setValue('Custom Value')
289
+ await input.trigger('input')
290
+ await input.trigger('keydown', { key: 'Enter' })
291
+ await flushPromises()
292
+
293
+ expect(wrapper.emitted('change')).toBeFalsy()
294
+ })
295
+
296
+ test('CAutocomplete highlights search matches', async () => {
297
+ const wrapper = mount(CAutocomplete, {
298
+ props: {
299
+ options: mockOptions,
300
+ highlightOptionsOnSearch: true,
301
+ },
302
+ })
303
+
304
+ const input = wrapper.find('input[role="combobox"]')
305
+ await input.setValue('app')
306
+ await input.trigger('input')
307
+ await flushPromises()
308
+
309
+ const option = wrapper.find('.autocomplete-option')
310
+ expect(option.exists()).toBe(true)
311
+ })
312
+
313
+ test('CAutocomplete is disabled when disabled prop is true', async () => {
314
+ const wrapper = mount(CAutocomplete, {
315
+ props: {
316
+ options: mockOptions,
317
+ disabled: true,
318
+ },
319
+ })
320
+
321
+ const input = wrapper.find('input[role="combobox"]')
322
+ expect(input.attributes('disabled')).toBeDefined()
323
+ })
324
+
325
+ test('CAutocomplete is readonly when readOnly prop is true', async () => {
326
+ const wrapper = mount(CAutocomplete, {
327
+ props: {
328
+ options: mockOptions,
329
+ readOnly: true,
330
+ },
331
+ })
332
+
333
+ const input = wrapper.find('input[role="combobox"]')
334
+ expect(input.attributes('readonly')).toBeDefined()
335
+ })
336
+
337
+ test('CAutocomplete emits input event on search', async () => {
338
+ const wrapper = mount(CAutocomplete, {
339
+ props: {
340
+ options: mockOptions,
341
+ },
342
+ })
343
+
344
+ const input = wrapper.find('input[role="combobox"]')
345
+ await input.setValue('test')
346
+ await input.trigger('input')
347
+ await flushPromises()
348
+
349
+ expect(wrapper.emitted('input')).toBeTruthy()
350
+ expect(wrapper.emitted('input')![0]).toEqual(['test'])
351
+ })
352
+
353
+ test('CAutocomplete emits show and hide events', async () => {
354
+ const wrapper = mount(CAutocomplete, {
355
+ props: {
356
+ options: mockOptions,
357
+ },
358
+ })
359
+
360
+ const input = wrapper.find('input[role="combobox"]')
361
+
362
+ // Test show event
363
+ await input.trigger('click')
364
+ await flushPromises()
365
+ expect(wrapper.emitted('show')).toBeTruthy()
366
+
367
+ // Test hide event
368
+ await input.trigger('keydown', { key: 'Escape' })
369
+ await flushPromises()
370
+ expect(wrapper.emitted('hide')).toBeTruthy()
371
+ })
372
+
373
+ test('CAutocomplete handles string options correctly', async () => {
374
+ const stringOptions = ['Apple', 'Banana', 'Cherry']
375
+ const wrapper = mount(CAutocomplete, {
376
+ props: {
377
+ options: stringOptions,
378
+ },
379
+ })
380
+
381
+ const input = wrapper.find('input[role="combobox"]')
382
+ await input.trigger('click')
383
+ await flushPromises()
384
+
385
+ expect(wrapper.text()).toContain('Apple')
386
+ expect(wrapper.text()).toContain('Banana')
387
+ expect(wrapper.text()).toContain('Cherry')
388
+ })
389
+
390
+ test('CAutocomplete handles virtual scroller', async () => {
391
+ const wrapper = mount(CAutocomplete, {
392
+ props: {
393
+ options: mockOptions,
394
+ virtualScroller: true,
395
+ visibleItems: 2,
396
+ },
397
+ })
398
+
399
+ const input = wrapper.find('input[role="combobox"]')
400
+ await input.trigger('click')
401
+ await flushPromises()
402
+
403
+ expect(wrapper.find('[role="listbox"]').exists()).toBe(true)
404
+ })
405
+
406
+ test('CAutocomplete clears search on select when clearSearchOnSelect is true', async () => {
407
+ const wrapper = mount(CAutocomplete, {
408
+ props: {
409
+ options: mockOptions,
410
+ clearSearchOnSelect: true,
411
+ },
412
+ })
413
+
414
+ const input = wrapper.find('input[role="combobox"]')
415
+ await input.setValue('app')
416
+ await input.trigger('input')
417
+ await input.trigger('click')
418
+ await flushPromises()
419
+
420
+ const option = wrapper.find('.autocomplete-option')
421
+ await option.trigger('click')
422
+ await flushPromises()
423
+
424
+ expect(wrapper.emitted('input')).toBeTruthy()
425
+ // Should emit empty string when clearing search
426
+ const inputEvents = wrapper.emitted('input') as string[][]
427
+ expect(inputEvents[inputEvents.length - 1]).toEqual([''])
428
+ })
429
+ })