@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,855 @@
1
+ import {
2
+ computed,
3
+ defineComponent,
4
+ h,
5
+ nextTick,
6
+ onUnmounted,
7
+ PropType,
8
+ ref,
9
+ useId,
10
+ watch,
11
+ } from 'vue'
12
+
13
+ import { createPopper, Instance as PopperInstance, Placement } from '@popperjs/core'
14
+
15
+ import { CConditionalTeleport } from '../conditional-teleport'
16
+ import { CFormControlWrapper } from '../form/CFormControlWrapper'
17
+ import { CAutocompleteOptions } from './CAutocompleteOptions'
18
+
19
+ import type { Option, OptionsGroup, Search } from './types'
20
+ import {
21
+ filterOptions,
22
+ flattenOptionsArray,
23
+ getOptionLabel,
24
+ getFirstOptionByLabel,
25
+ isGlobalSearch,
26
+ getFirstOptionByValue,
27
+ isExternalSearch,
28
+ } from './utils'
29
+
30
+ const CAutocomplete = defineComponent({
31
+ name: 'CAutocomplete',
32
+ props: {
33
+ /**
34
+ * Only allow selection of predefined options.
35
+ * When `true`, users cannot enter custom values that are not in the options list.
36
+ * When `false`, users can enter and select custom values.
37
+ *
38
+ * @default false
39
+ */
40
+ allowOnlyDefinedOptions: {
41
+ type: Boolean,
42
+ default: false,
43
+ },
44
+ /**
45
+ * Enables selection cleaner element.
46
+ * When `true`, displays a clear button that allows users to reset the selection.
47
+ * The cleaner button is only shown when there is a selection and the component is not disabled or read-only.
48
+ *
49
+ * @default false
50
+ */
51
+ cleaner: {
52
+ type: Boolean,
53
+ default: false,
54
+ },
55
+ /**
56
+ * Whether to clear the internal search state after selecting an option.
57
+ *
58
+ * When set to `true`, the internal search value used for filtering options is cleared
59
+ * after a selection is made. This affects only the component's internal logic.
60
+ *
61
+ * Note: This does **not** clear the visible input field if the component is using external search
62
+ * or is controlled via the `search-value` prop. In such cases, clearing must be handled externally.
63
+ *
64
+ * @default true
65
+ */
66
+ clearSearchOnSelect: {
67
+ type: Boolean,
68
+ default: true,
69
+ },
70
+ /**
71
+ * Specifies the container element for positioning the dropdown.
72
+ * - `HTMLElement`: Direct reference to a DOM element
73
+ * - `Function`: Function that returns a DOM element
74
+ * - `string`: CSS selector string to identify the container element
75
+ * Used in conjunction with the teleport prop to control dropdown positioning.
76
+ *
77
+ * @default 'body'
78
+ */
79
+ container: {
80
+ type: [Object, String] as PropType<HTMLElement | (() => HTMLElement) | string>,
81
+ default: 'body',
82
+ },
83
+ /**
84
+ * Toggle the disabled state for the component.
85
+ * When `true`, the Vue.js autocomplete is non-interactive and appears visually disabled.
86
+ * Users cannot type, select options, or trigger the dropdown.
87
+ */
88
+ disabled: {
89
+ type: Boolean,
90
+ default: false,
91
+ },
92
+ /**
93
+ * Provide valuable, actionable feedback to your users with HTML5 form validation feedback.
94
+ */
95
+ feedback: String,
96
+ /**
97
+ * Provide valuable, actionable invalid feedback when using standard HTML form validation which applied `invalid` prop.
98
+ */
99
+ feedbackInvalid: String,
100
+ /**
101
+ * Provide valuable, actionable valid feedback when using standard HTML form validation which applied `valid` prop.
102
+ */
103
+ feedbackValid: String,
104
+ /**
105
+ * Highlight options that match the search criteria.
106
+ * When `true`, matching portions of option labels are visually highlighted
107
+ * based on the current search input value.
108
+ *
109
+ * @default false
110
+ */
111
+ highlightOptionsOnSearch: {
112
+ type: Boolean,
113
+ default: false,
114
+ },
115
+ /**
116
+ * Set the id attribute for the native input element.
117
+ * This id is used for accessibility purposes and form associations.
118
+ * If not provided, a unique id may be generated automatically.
119
+ */
120
+ id: String,
121
+ /**
122
+ * Show dropdown indicator/arrow button.
123
+ * When `true`, displays a dropdown arrow button that can be clicked
124
+ * to manually show or hide the options dropdown.
125
+ */
126
+ indicator: Boolean,
127
+ /**
128
+ * Set component validation state to invalid.
129
+ */
130
+ invalid: Boolean,
131
+ /**
132
+ * Add a caption for a component.
133
+ */
134
+ label: String,
135
+ /**
136
+ * When set, the options list will have a loading style: loading spinner and reduced opacity.
137
+ * Use this to indicate that options are being fetched asynchronously.
138
+ * The dropdown remains functional but shows visual loading indicators.
139
+ */
140
+ loading: Boolean,
141
+ /**
142
+ * The name attribute for the input element.
143
+ * Used for form submission and identification in form data.
144
+ * Important for proper form handling and accessibility.
145
+ */
146
+ name: String,
147
+ /**
148
+ * List of option elements.
149
+ * Can contain Option objects, OptionsGroup objects, or plain strings.
150
+ * Plain strings are converted to simple Option objects internally.
151
+ * This is a required prop - the Vue.js autocomplete needs options to function.
152
+ */
153
+ options: {
154
+ type: Array as PropType<(Option | OptionsGroup | string)[]>,
155
+ required: true,
156
+ },
157
+ /**
158
+ * Sets maxHeight of options list.
159
+ * Controls the maximum height of the dropdown options container.
160
+ * Can be a number (pixels) or a CSS length string (e.g., '200px', '10rem').
161
+ * When content exceeds this height, a scrollbar will appear.
162
+ *
163
+ * @default 'auto'
164
+ */
165
+ optionsMaxHeight: {
166
+ type: [Number, String] as PropType<number | string>,
167
+ default: 'auto',
168
+ },
169
+ /**
170
+ * Specifies a short hint that is visible in the search input.
171
+ * Displayed when the input is empty to guide user interaction.
172
+ * Standard HTML input placeholder behavior.
173
+ */
174
+ placeholder: String,
175
+ /**
176
+ * Toggle the readonly state for the component.
177
+ * When `true`, users can view and interact with the dropdown but cannot
178
+ * type in the search input or modify the selection through typing.
179
+ * Selection via clicking options may still be possible.
180
+ */
181
+ readOnly: {
182
+ type: Boolean,
183
+ default: false,
184
+ },
185
+ /**
186
+ * When it is present, it indicates that the user must choose a value before submitting the form.
187
+ * Adds HTML5 form validation requirement. The form will not submit
188
+ * until a valid selection is made.
189
+ */
190
+ required: {
191
+ type: Boolean,
192
+ default: false,
193
+ },
194
+ /**
195
+ * Determines whether the selected options should be cleared when the options list is updated.
196
+ * When `true`, any previously selected options will be reset whenever the options
197
+ * list undergoes a change. This ensures that outdated selections are not retained
198
+ * when new options are provided.
199
+ *
200
+ * @default false
201
+ */
202
+ resetSelectionOnOptionsChange: {
203
+ type: Boolean,
204
+ default: false,
205
+ },
206
+ /**
207
+ * Enables and configures search functionality.
208
+ * - `'external'`: Search is handled externally, filtering is not applied internally
209
+ * - `'global'`: Enables global keyboard search when dropdown is closed
210
+ * - Object with `external` and `global` boolean properties for fine-grained control
211
+ */
212
+ search: [String, Object] as PropType<Search>,
213
+ /**
214
+ * Sets the label for no results when filtering.
215
+ * - `false`: Don't show any message when no results found
216
+ * - `true`: Show default "No results found" message
217
+ * - `string`: Show custom text message
218
+ *
219
+ * @default false
220
+ */
221
+ searchNoResultsLabel: {
222
+ type: [Boolean, String] as PropType<boolean | string>,
223
+ default: false,
224
+ },
225
+ /**
226
+ * Show hint options based on the current input value.
227
+ * When `true`, displays a preview/hint of the first matching option
228
+ * as semi-transparent text in the input field, similar to browser autocomplete.
229
+ *
230
+ * @default false
231
+ */
232
+ showHints: {
233
+ type: Boolean,
234
+ default: false,
235
+ },
236
+ /**
237
+ * Size the component small or large.
238
+ * - `'sm'`: Small size variant
239
+ * - `'lg'`: Large size variant
240
+ * - `undefined`: Default/medium size
241
+ */
242
+ size: String as PropType<'sm' | 'lg'>,
243
+ /**
244
+ * Enable teleportation of the dropdown to a different container.
245
+ * When `true`, the dropdown is rendered in the container specified by the `container` prop
246
+ * instead of being rendered inline. This is useful for avoiding z-index issues and positioning
247
+ * problems when the autocomplete is inside elements with overflow constraints.
248
+ *
249
+ * @default false
250
+ */
251
+ teleport: {
252
+ type: Boolean,
253
+ default: false,
254
+ },
255
+ /**
256
+ * Add helper text to a form control.
257
+ */
258
+ text: String,
259
+ /**
260
+ * Display validation feedback in a styled tooltip.
261
+ */
262
+ tooltipFeedback: Boolean,
263
+ /**
264
+ * Set component validation state to valid.
265
+ */
266
+ valid: Boolean,
267
+ /**
268
+ * The model value for v-model support.
269
+ * Can be a string (matched against option labels) or number (matched against option values).
270
+ * Used for two-way data binding with v-model.
271
+ */
272
+ modelValue: [Number, String] as PropType<number | string>,
273
+ /**
274
+ * Sets the initially selected value for the Vue.js autocomplete component.
275
+ * Can be a string (matched against option labels) or number (matched against option values).
276
+ * The component will attempt to find and select the matching option on mount.
277
+ */
278
+ value: [Number, String] as PropType<number | string>,
279
+ /**
280
+ * Enable virtual scroller for the options list.
281
+ * When `true`, only visible options are rendered in the DOM for better performance
282
+ * with large option lists. Works in conjunction with `visible-items` prop.
283
+ *
284
+ * @default false
285
+ */
286
+ virtualScroller: {
287
+ type: Boolean,
288
+ default: false,
289
+ },
290
+ /**
291
+ * Toggle the visibility of autocomplete dropdown.
292
+ * Controls whether the dropdown is initially visible.
293
+ * The dropdown visibility can still be toggled through user interaction.
294
+ *
295
+ * @default false
296
+ */
297
+ visible: {
298
+ type: Boolean,
299
+ default: false,
300
+ },
301
+ /**
302
+ * Amount of visible items when virtualScroller is enabled.
303
+ * Determines how many option items are rendered at once when virtual scrolling is active.
304
+ * Higher values show more items but use more memory. Lower values improve performance.
305
+ *
306
+ * @default 10
307
+ */
308
+ visibleItems: {
309
+ type: Number,
310
+ default: 10,
311
+ },
312
+ },
313
+ emits: [
314
+ /**
315
+ * Execute a function when a user changes the selected option.
316
+ * Called with the selected option object or `null` when cleared.
317
+ *
318
+ * @property {function(option: Option | null): void}
319
+ */
320
+ 'change',
321
+ /**
322
+ * Execute a function when the filter/search value changes.
323
+ * Called whenever the user types in the search input.
324
+ *
325
+ * @property {function(value: string): void}
326
+ */
327
+ 'input',
328
+ /**
329
+ * The callback is fired when the dropdown requests to be hidden.
330
+ * Called when the dropdown closes due to user interaction, clicks outside, escape key, or programmatic changes.
331
+ *
332
+ * @property {function(): void}
333
+ */
334
+ 'hide',
335
+ /**
336
+ * The callback is fired when the dropdown requests to be shown.
337
+ * Called when the dropdown opens due to user interaction, focus, or programmatic changes.
338
+ *
339
+ * @property {function(): void}
340
+ */
341
+ 'show',
342
+ /**
343
+ * Update the model value for v-model support.
344
+ * Emitted when the selected value changes to support two-way data binding.
345
+ *
346
+ * @property {function(value: number | string | null): void}
347
+ */
348
+ 'update:modelValue',
349
+ ],
350
+ setup(props, { emit, attrs, slots }) {
351
+ const autoCompleteRef = ref<HTMLDivElement>()
352
+ const dropdownRef = ref<HTMLDivElement>()
353
+ const togglerRef = ref<HTMLDivElement>()
354
+ const inputRef = ref<HTMLInputElement>()
355
+ const inputHintRef = ref<HTMLInputElement>()
356
+
357
+ const hint = ref<Option | undefined>()
358
+ const searchValue = ref('')
359
+ const selected = ref<Option | null>(null)
360
+ const visible = ref(props.visible)
361
+
362
+ const uniqueId = props.id ?? useId()
363
+ let popperInstance: PopperInstance | null = null
364
+
365
+ const filteredOptions = computed(() =>
366
+ isExternalSearch(props.search)
367
+ ? props.options
368
+ : filterOptions(props.options, searchValue.value)
369
+ )
370
+
371
+ const popperConfig = computed(() => ({
372
+ placement: 'bottom-start' as Placement,
373
+ modifiers: [
374
+ {
375
+ name: 'preventOverflow',
376
+ options: {
377
+ boundary: 'clippingParents',
378
+ },
379
+ },
380
+ {
381
+ name: 'offset',
382
+ options: {
383
+ offset: [0, 2],
384
+ },
385
+ },
386
+ ],
387
+ }))
388
+
389
+ const handleClear = () => {
390
+ if (inputRef.value) {
391
+ inputRef.value.value = ''
392
+ }
393
+
394
+ searchValue.value = ''
395
+ selected.value = null
396
+ emit('change', null)
397
+ emit('update:modelValue', null)
398
+ }
399
+
400
+ const handleGlobalSearch = (event: KeyboardEvent) => {
401
+ if (
402
+ isGlobalSearch(props.search) &&
403
+ inputRef.value &&
404
+ (event.key.length === 1 || event.key === 'Backspace' || event.key === 'Delete')
405
+ ) {
406
+ inputRef.value.focus()
407
+ }
408
+ }
409
+
410
+ const handleInputChange = (event: Event) => {
411
+ const value = (event.target as HTMLInputElement).value
412
+ handleSearch(value)
413
+
414
+ if (selected.value !== null) {
415
+ emit('change', null)
416
+ selected.value = null
417
+ }
418
+ }
419
+
420
+ const handleInputKeyDown = (event: KeyboardEvent) => {
421
+ if (event.key === 'Escape') {
422
+ handleDropdownHide()
423
+ return
424
+ }
425
+
426
+ if (
427
+ (event.key === 'Down' || event.key === 'ArrowDown') &&
428
+ inputRef.value?.value.length === inputRef.value?.selectionStart
429
+ ) {
430
+ event.preventDefault()
431
+ handleDropdownShow()
432
+
433
+ nextTick(() => {
434
+ const target = event.target as HTMLElement
435
+ const firstOption = target.parentElement?.parentElement?.querySelectorAll(
436
+ '.autocomplete-option'
437
+ )[0] as HTMLElement | null
438
+
439
+ if (firstOption) {
440
+ firstOption.focus()
441
+ }
442
+ })
443
+
444
+ return
445
+ }
446
+
447
+ if (props.showHints && hint.value && event.key === 'Tab') {
448
+ event.preventDefault()
449
+ handleSelect(hint.value)
450
+ return
451
+ }
452
+
453
+ if (event.key === 'Enter') {
454
+ const input = event.target as HTMLInputElement
455
+ const foundOptions = getFirstOptionByLabel(input.value, filteredOptions.value)
456
+ if (foundOptions) {
457
+ handleSelect(foundOptions)
458
+ } else {
459
+ if (!props.allowOnlyDefinedOptions) {
460
+ handleSelect(input.value)
461
+ }
462
+ }
463
+
464
+ handleDropdownHide()
465
+ return
466
+ }
467
+
468
+ if (event.key === 'Backspace' || event.key === 'Delete') {
469
+ if (selected.value !== null) {
470
+ selected.value = null
471
+ emit('change', null)
472
+ }
473
+
474
+ return
475
+ }
476
+ }
477
+
478
+ const handleKeyUp = (event: KeyboardEvent) => {
479
+ if (event.key === 'Escape') {
480
+ handleDropdownHide()
481
+ }
482
+
483
+ if (autoCompleteRef.value && !autoCompleteRef.value.contains(event.target as HTMLElement)) {
484
+ handleDropdownHide()
485
+ }
486
+ }
487
+
488
+ const handleMouseUp = (event: Event) => {
489
+ if (autoCompleteRef.value && autoCompleteRef.value.contains(event.target as HTMLElement)) {
490
+ return
491
+ }
492
+
493
+ handleDropdownHide()
494
+ }
495
+
496
+ const handleOptionClick = (option: Option) => {
497
+ handleSelect(option)
498
+ }
499
+
500
+ const handleSearch = (search: string) => {
501
+ emit('input', search)
502
+ searchValue.value = search
503
+ }
504
+
505
+ const handleSelect = (option?: Option | string) => {
506
+ if (option && typeof option === 'object' && option.disabled) {
507
+ return
508
+ }
509
+
510
+ if (inputRef.value) {
511
+ inputRef.value.value = option ? getOptionLabel(option) : ''
512
+ }
513
+
514
+ selected.value = option ?? null
515
+ emit('change', option ?? null)
516
+
517
+ // Emit v-model update
518
+ if (typeof option === 'string') {
519
+ emit('update:modelValue', option)
520
+ } else if (option && typeof option === 'object') {
521
+ emit('update:modelValue', option.value)
522
+ } else {
523
+ emit('update:modelValue', null)
524
+ }
525
+
526
+ if (props.clearSearchOnSelect) {
527
+ handleSearch('')
528
+ } else {
529
+ hint.value = undefined
530
+ return
531
+ }
532
+
533
+ handleDropdownHide()
534
+ }
535
+
536
+ const handleDropdownShow = () => {
537
+ if (props.disabled || props.readOnly || visible.value) {
538
+ return
539
+ }
540
+
541
+ if (
542
+ !isExternalSearch(props.search) &&
543
+ filteredOptions.value.length === 0 &&
544
+ props.searchNoResultsLabel === false
545
+ ) {
546
+ return
547
+ }
548
+
549
+ if (props.teleport && dropdownRef.value && togglerRef.value) {
550
+ dropdownRef.value.style.minWidth = `${(togglerRef.value as HTMLElement).offsetWidth}px`
551
+ }
552
+
553
+ visible.value = true
554
+ emit('show')
555
+
556
+ window.addEventListener('mouseup', handleMouseUp)
557
+ window.addEventListener('keyup', handleKeyUp)
558
+
559
+ if (togglerRef.value && dropdownRef.value) {
560
+ popperInstance = createPopper(togglerRef.value, dropdownRef.value, popperConfig.value)
561
+ }
562
+
563
+ nextTick(() => {
564
+ inputRef.value?.focus()
565
+ })
566
+ }
567
+
568
+ const handleDropdownHide = () => {
569
+ visible.value = false
570
+ emit('hide')
571
+
572
+ window.removeEventListener('mouseup', handleMouseUp)
573
+ window.removeEventListener('keyup', handleKeyUp)
574
+
575
+ if (popperInstance) {
576
+ popperInstance.destroy()
577
+ popperInstance = null
578
+ }
579
+
580
+ nextTick(() => {
581
+ inputRef.value?.focus()
582
+ })
583
+ }
584
+
585
+ watch(
586
+ () => props.options,
587
+ () => {
588
+ if (props.resetSelectionOnOptionsChange) {
589
+ handleClear()
590
+ }
591
+ }
592
+ )
593
+
594
+ watch(
595
+ () => [props.options, props.value, props.modelValue, inputRef.value],
596
+ () => {
597
+ if (inputRef.value === undefined) {
598
+ return
599
+ }
600
+
601
+ // Handle modelValue prop for v-model support
602
+ const currentValue = props.modelValue ?? props.value
603
+
604
+ if (currentValue && typeof currentValue === 'string') {
605
+ handleSelect(currentValue)
606
+ return
607
+ }
608
+
609
+ if (currentValue && typeof currentValue === 'number') {
610
+ const foundOption = getFirstOptionByValue(currentValue, props.options)
611
+ if (foundOption) {
612
+ handleSelect(foundOption)
613
+ }
614
+
615
+ return
616
+ }
617
+
618
+ const _selected = flattenOptionsArray(filteredOptions.value).find(
619
+ (option: Option) => typeof option !== 'string' && option.selected === true
620
+ )
621
+
622
+ if (_selected) {
623
+ handleSelect(_selected)
624
+ }
625
+ }
626
+ )
627
+
628
+ watch(
629
+ () => [filteredOptions.value, searchValue.value, props.showHints],
630
+ () => {
631
+ if (!props.showHints) {
632
+ return
633
+ }
634
+
635
+ const findOption =
636
+ searchValue.value.length > 0
637
+ ? filteredOptions.value.find((option) =>
638
+ getOptionLabel(option).toLowerCase().startsWith(searchValue.value.toLowerCase())
639
+ )
640
+ : undefined
641
+
642
+ hint.value = findOption
643
+ }
644
+ )
645
+
646
+ watch(
647
+ () => filteredOptions.value,
648
+ () => {
649
+ if (
650
+ !props.searchNoResultsLabel &&
651
+ searchValue.value !== '' &&
652
+ filteredOptions.value.length === 0
653
+ ) {
654
+ if (visible.value) {
655
+ handleDropdownHide()
656
+ }
657
+
658
+ return
659
+ }
660
+
661
+ if (searchValue.value.length > 0) {
662
+ handleDropdownShow()
663
+ }
664
+ }
665
+ )
666
+
667
+ watch(
668
+ () => props.visible,
669
+ (newVisible) => {
670
+ if (newVisible) {
671
+ handleDropdownShow()
672
+ } else {
673
+ handleDropdownHide()
674
+ }
675
+ }
676
+ )
677
+
678
+ onUnmounted(() => {
679
+ window.removeEventListener('mouseup', handleMouseUp)
680
+ window.removeEventListener('keyup', handleKeyUp)
681
+ if (popperInstance) {
682
+ popperInstance.destroy()
683
+ }
684
+ })
685
+
686
+ return () =>
687
+ h(
688
+ CFormControlWrapper,
689
+ {
690
+ ...(typeof attrs['aria-describedby'] === 'string' && {
691
+ describedby: attrs['aria-describedby'],
692
+ }),
693
+ feedback: props.feedback,
694
+ feedbackInvalid: props.feedbackInvalid,
695
+ feedbackValid: props.feedbackValid,
696
+ id: uniqueId,
697
+ invalid: props.invalid,
698
+ label: props.label,
699
+ text: props.text,
700
+ tooltipFeedback: props.tooltipFeedback,
701
+ valid: props.valid,
702
+ },
703
+ () =>
704
+ h(
705
+ 'div',
706
+ {
707
+ class: [
708
+ 'autocomplete',
709
+ {
710
+ [`autocomplete-${props.size}`]: props.size,
711
+ disabled: props.disabled,
712
+ 'is-invalid': props.invalid,
713
+ 'is-valid': props.valid,
714
+ show: visible.value,
715
+ },
716
+ ],
717
+ onKeydown: handleGlobalSearch,
718
+ ref: autoCompleteRef,
719
+ },
720
+ [
721
+ h(
722
+ 'div',
723
+ {
724
+ class: 'autocomplete-input-group',
725
+ onClick: () => handleDropdownShow(),
726
+ ref: togglerRef,
727
+ },
728
+ [
729
+ props.showHints &&
730
+ searchValue.value !== '' &&
731
+ h('input', {
732
+ class: 'autocomplete-input autocomplete-input-hint',
733
+ id: `hint-${uniqueId}`,
734
+ autocomplete: 'off',
735
+ readonly: true,
736
+ tabindex: -1,
737
+ 'aria-hidden': 'true',
738
+ value: hint.value
739
+ ? `${searchValue.value}${getOptionLabel(hint.value).slice(searchValue.value.length)}`
740
+ : '',
741
+ ref: inputHintRef,
742
+ }),
743
+ h('input', {
744
+ type: 'text',
745
+ class: 'autocomplete-input',
746
+ disabled: props.disabled,
747
+ id: uniqueId,
748
+ name: props.name || uniqueId,
749
+ onBlur: (event: Event) => {
750
+ event.preventDefault()
751
+ event.stopPropagation()
752
+ if (
753
+ props.allowOnlyDefinedOptions &&
754
+ selected.value === null &&
755
+ filteredOptions.value.length === 0
756
+ ) {
757
+ handleClear()
758
+ }
759
+ },
760
+ onInput: handleInputChange,
761
+ onKeydown: handleInputKeyDown,
762
+ placeholder: props.placeholder,
763
+ autocomplete: 'off',
764
+ required: props.required,
765
+ 'aria-autocomplete': 'list',
766
+ 'aria-expanded': visible.value,
767
+ 'aria-haspopup': 'listbox',
768
+ ...(props.teleport && { 'aria-owns': `autocomplete-listbox-${uniqueId}` }),
769
+ readonly: props.readOnly,
770
+ role: 'combobox',
771
+ ref: inputRef,
772
+ }),
773
+ (props.cleaner || props.indicator) &&
774
+ h('div', { class: 'autocomplete-buttons' }, [
775
+ !props.disabled &&
776
+ !props.readOnly &&
777
+ props.cleaner &&
778
+ selected.value &&
779
+ h('button', {
780
+ type: 'button',
781
+ class: 'autocomplete-cleaner',
782
+ onClick: (event: Event) => {
783
+ event.preventDefault()
784
+ event.stopPropagation()
785
+ handleClear()
786
+ },
787
+ }),
788
+ h('button', {
789
+ type: 'button',
790
+ class: 'autocomplete-indicator',
791
+ disabled:
792
+ !(props.searchNoResultsLabel || filteredOptions.value.length > 0) &&
793
+ !isExternalSearch(props.search),
794
+ onClick: (event: Event) => {
795
+ event.preventDefault()
796
+ event.stopPropagation()
797
+ if (visible.value) {
798
+ handleDropdownHide()
799
+ } else {
800
+ handleDropdownShow()
801
+ }
802
+ },
803
+ }),
804
+ ]),
805
+ ]
806
+ ),
807
+ h(
808
+ CConditionalTeleport,
809
+ {
810
+ container: props.container,
811
+ teleport: props.teleport,
812
+ },
813
+ {
814
+ default: () =>
815
+ h(
816
+ 'div',
817
+ {
818
+ class: [
819
+ 'autocomplete-dropdown',
820
+ {
821
+ show: props.teleport && visible.value,
822
+ },
823
+ ],
824
+ id: `autocomplete-listbox-${uniqueId}`,
825
+ role: 'listbox',
826
+ 'aria-labelledby': uniqueId,
827
+ ref: dropdownRef,
828
+ },
829
+ [
830
+ h(CAutocompleteOptions, {
831
+ highlightOptionsOnSearch: props.highlightOptionsOnSearch,
832
+ loading: props.loading,
833
+ onOptionClick: (option: Option) =>
834
+ !props.disabled && !props.readOnly && handleOptionClick(option),
835
+ options: filteredOptions.value,
836
+ optionsMaxHeight: props.optionsMaxHeight,
837
+ scopedSlots: slots,
838
+ searchNoResultsLabel: props.searchNoResultsLabel,
839
+ searchValue: searchValue.value,
840
+ selected: selected.value,
841
+ virtualScroller: props.virtualScroller,
842
+ visible: visible.value,
843
+ visibleItems: props.visibleItems,
844
+ }),
845
+ ]
846
+ ),
847
+ }
848
+ ),
849
+ ]
850
+ )
851
+ )
852
+ },
853
+ })
854
+
855
+ export { CAutocomplete }