@coreui/vue-pro 5.5.0 → 5.7.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 (510) 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/avatar/CAvatar.js.map +1 -1
  13. package/dist/cjs/components/avatar/index.js.map +1 -1
  14. package/dist/cjs/components/backdrop/CBackdrop.js.map +1 -1
  15. package/dist/cjs/components/backdrop/index.js.map +1 -1
  16. package/dist/cjs/components/badge/CBadge.js.map +1 -1
  17. package/dist/cjs/components/badge/index.js.map +1 -1
  18. package/dist/cjs/components/breadcrumb/CBreadcrumb.js.map +1 -1
  19. package/dist/cjs/components/breadcrumb/CBreadcrumbItem.js.map +1 -1
  20. package/dist/cjs/components/breadcrumb/index.js.map +1 -1
  21. package/dist/cjs/components/button/CButton.js.map +1 -1
  22. package/dist/cjs/components/button/index.js.map +1 -1
  23. package/dist/cjs/components/button-group/CButtonGroup.js.map +1 -1
  24. package/dist/cjs/components/button-group/CButtonToolbar.js.map +1 -1
  25. package/dist/cjs/components/button-group/index.js.map +1 -1
  26. package/dist/cjs/components/calendar/CCalendar.js +2 -2
  27. package/dist/cjs/components/calendar/CCalendar.js.map +1 -1
  28. package/dist/cjs/components/calendar/index.js.map +1 -1
  29. package/dist/cjs/components/calendar/utils.js +5 -0
  30. package/dist/cjs/components/calendar/utils.js.map +1 -1
  31. package/dist/cjs/components/callout/CCallout.js.map +1 -1
  32. package/dist/cjs/components/callout/index.js.map +1 -1
  33. package/dist/cjs/components/card/CCard.js.map +1 -1
  34. package/dist/cjs/components/card/CCardBody.js.map +1 -1
  35. package/dist/cjs/components/card/CCardFooter.js.map +1 -1
  36. package/dist/cjs/components/card/CCardGroup.js.map +1 -1
  37. package/dist/cjs/components/card/CCardHeader.js.map +1 -1
  38. package/dist/cjs/components/card/CCardImage.js.map +1 -1
  39. package/dist/cjs/components/card/CCardImageOverlay.js.map +1 -1
  40. package/dist/cjs/components/card/CCardLink.js.map +1 -1
  41. package/dist/cjs/components/card/CCardSubtitle.js.map +1 -1
  42. package/dist/cjs/components/card/CCardText.js.map +1 -1
  43. package/dist/cjs/components/card/CCardTitle.js.map +1 -1
  44. package/dist/cjs/components/card/index.js.map +1 -1
  45. package/dist/cjs/components/carousel/CCarousel.js.map +1 -1
  46. package/dist/cjs/components/carousel/CCarouselCaption.js.map +1 -1
  47. package/dist/cjs/components/carousel/CCarouselItem.js.map +1 -1
  48. package/dist/cjs/components/carousel/index.js.map +1 -1
  49. package/dist/cjs/components/close-button/CCloseButton.js.map +1 -1
  50. package/dist/cjs/components/close-button/index.js.map +1 -1
  51. package/dist/cjs/components/collapse/CCollapse.js.map +1 -1
  52. package/dist/cjs/components/collapse/index.js.map +1 -1
  53. package/dist/cjs/components/conditional-teleport/CConditionalTeleport.js.map +1 -1
  54. package/dist/cjs/components/conditional-teleport/index.js.map +1 -1
  55. package/dist/cjs/components/date-picker/CDatePicker.js.map +1 -1
  56. package/dist/cjs/components/date-picker/index.js.map +1 -1
  57. package/dist/cjs/components/date-range-picker/CDateRangePicker.js +7 -5
  58. package/dist/cjs/components/date-range-picker/CDateRangePicker.js.map +1 -1
  59. package/dist/cjs/components/date-range-picker/index.js.map +1 -1
  60. package/dist/cjs/components/date-range-picker/utils.js.map +1 -1
  61. package/dist/cjs/components/dropdown/CDropdown.d.ts +1 -1
  62. package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
  63. package/dist/cjs/components/dropdown/CDropdownDivider.js.map +1 -1
  64. package/dist/cjs/components/dropdown/CDropdownHeader.js.map +1 -1
  65. package/dist/cjs/components/dropdown/CDropdownItem.js.map +1 -1
  66. package/dist/cjs/components/dropdown/CDropdownMenu.js.map +1 -1
  67. package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
  68. package/dist/cjs/components/dropdown/index.js.map +1 -1
  69. package/dist/cjs/components/dropdown/utils.js.map +1 -1
  70. package/dist/cjs/components/element-cover/CElementCover.js.map +1 -1
  71. package/dist/cjs/components/element-cover/index.js.map +1 -1
  72. package/dist/cjs/components/footer/CFooter.js.map +1 -1
  73. package/dist/cjs/components/footer/index.js.map +1 -1
  74. package/dist/cjs/components/form/CForm.js.map +1 -1
  75. package/dist/cjs/components/form/CFormCheck.js.map +1 -1
  76. package/dist/cjs/components/form/CFormControlValidation.js.map +1 -1
  77. package/dist/cjs/components/form/CFormControlWrapper.js.map +1 -1
  78. package/dist/cjs/components/form/CFormFeedback.js.map +1 -1
  79. package/dist/cjs/components/form/CFormFloating.js.map +1 -1
  80. package/dist/cjs/components/form/CFormInput.js.map +1 -1
  81. package/dist/cjs/components/form/CFormLabel.js.map +1 -1
  82. package/dist/cjs/components/form/CFormRange.js.map +1 -1
  83. package/dist/cjs/components/form/CFormSelect.js.map +1 -1
  84. package/dist/cjs/components/form/CFormSwitch.js.map +1 -1
  85. package/dist/cjs/components/form/CFormText.js.map +1 -1
  86. package/dist/cjs/components/form/CFormTextarea.js.map +1 -1
  87. package/dist/cjs/components/form/CInputGroup.js.map +1 -1
  88. package/dist/cjs/components/form/CInputGroupText.js.map +1 -1
  89. package/dist/cjs/components/form/index.js.map +1 -1
  90. package/dist/cjs/components/grid/CCol.js.map +1 -1
  91. package/dist/cjs/components/grid/CContainer.js.map +1 -1
  92. package/dist/cjs/components/grid/CRow.js.map +1 -1
  93. package/dist/cjs/components/grid/index.js.map +1 -1
  94. package/dist/cjs/components/header/CHeader.js.map +1 -1
  95. package/dist/cjs/components/header/CHeaderBrand.js.map +1 -1
  96. package/dist/cjs/components/header/CHeaderDivider.js.map +1 -1
  97. package/dist/cjs/components/header/CHeaderNav.js.map +1 -1
  98. package/dist/cjs/components/header/CHeaderText.js.map +1 -1
  99. package/dist/cjs/components/header/CHeaderToggler.js.map +1 -1
  100. package/dist/cjs/components/header/index.js.map +1 -1
  101. package/dist/cjs/components/image/CImage.js.map +1 -1
  102. package/dist/cjs/components/image/index.js.map +1 -1
  103. package/dist/cjs/components/link/CLink.js.map +1 -1
  104. package/dist/cjs/components/link/index.js.map +1 -1
  105. package/dist/cjs/components/list-group/CListGroup.js.map +1 -1
  106. package/dist/cjs/components/list-group/CListGroupItem.js.map +1 -1
  107. package/dist/cjs/components/list-group/index.js.map +1 -1
  108. package/dist/cjs/components/loading-button/CLoadingButton.js.map +1 -1
  109. package/dist/cjs/components/loading-button/index.js.map +1 -1
  110. package/dist/cjs/components/modal/CModal.js.map +1 -1
  111. package/dist/cjs/components/modal/CModalBody.js.map +1 -1
  112. package/dist/cjs/components/modal/CModalFooter.js.map +1 -1
  113. package/dist/cjs/components/modal/CModalHeader.js.map +1 -1
  114. package/dist/cjs/components/modal/CModalTitle.js.map +1 -1
  115. package/dist/cjs/components/modal/index.js.map +1 -1
  116. package/dist/cjs/components/multi-select/CMultiSelect.d.ts +75 -8
  117. package/dist/cjs/components/multi-select/CMultiSelect.js +190 -129
  118. package/dist/cjs/components/multi-select/CMultiSelect.js.map +1 -1
  119. package/dist/cjs/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
  120. package/dist/cjs/components/multi-select/CMultiSelectOptions.js.map +1 -1
  121. package/dist/cjs/components/multi-select/CMultiSelectSelection.d.ts +15 -3
  122. package/dist/cjs/components/multi-select/CMultiSelectSelection.js +26 -2
  123. package/dist/cjs/components/multi-select/CMultiSelectSelection.js.map +1 -1
  124. package/dist/cjs/components/multi-select/index.js.map +1 -1
  125. package/dist/cjs/components/multi-select/types.d.ts +4 -0
  126. package/dist/cjs/components/multi-select/utils.d.ts +5 -2
  127. package/dist/cjs/components/multi-select/utils.js +18 -1
  128. package/dist/cjs/components/multi-select/utils.js.map +1 -1
  129. package/dist/cjs/components/nav/CNav.js.map +1 -1
  130. package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
  131. package/dist/cjs/components/nav/CNavGroupItems.js.map +1 -1
  132. package/dist/cjs/components/nav/CNavItem.d.ts +4 -2
  133. package/dist/cjs/components/nav/CNavItem.js +12 -1
  134. package/dist/cjs/components/nav/CNavItem.js.map +1 -1
  135. package/dist/cjs/components/nav/CNavLink.js.map +1 -1
  136. package/dist/cjs/components/nav/CNavTitle.js.map +1 -1
  137. package/dist/cjs/components/nav/index.js.map +1 -1
  138. package/dist/cjs/components/navbar/CNavbar.js.map +1 -1
  139. package/dist/cjs/components/navbar/CNavbarBrand.js.map +1 -1
  140. package/dist/cjs/components/navbar/CNavbarNav.js.map +1 -1
  141. package/dist/cjs/components/navbar/CNavbarText.js.map +1 -1
  142. package/dist/cjs/components/navbar/CNavbarToggler.js.map +1 -1
  143. package/dist/cjs/components/navbar/index.js.map +1 -1
  144. package/dist/cjs/components/offcanvas/COffcanvas.js.map +1 -1
  145. package/dist/cjs/components/offcanvas/COffcanvasBody.js.map +1 -1
  146. package/dist/cjs/components/offcanvas/COffcanvasHeader.js.map +1 -1
  147. package/dist/cjs/components/offcanvas/COffcanvasTitle.js.map +1 -1
  148. package/dist/cjs/components/offcanvas/index.js.map +1 -1
  149. package/dist/cjs/components/pagination/CPagination.js.map +1 -1
  150. package/dist/cjs/components/pagination/CPaginationItem.js.map +1 -1
  151. package/dist/cjs/components/pagination/index.js.map +1 -1
  152. package/dist/cjs/components/picker/CPicker.js.map +1 -1
  153. package/dist/cjs/components/picker/index.js.map +1 -1
  154. package/dist/cjs/components/placeholder/CPlaceholder.js.map +1 -1
  155. package/dist/cjs/components/placeholder/index.js.map +1 -1
  156. package/dist/cjs/components/popover/CPopover.js +1 -1
  157. package/dist/cjs/components/popover/CPopover.js.map +1 -1
  158. package/dist/cjs/components/popover/index.js.map +1 -1
  159. package/dist/cjs/components/progress/CProgress.js.map +1 -1
  160. package/dist/cjs/components/progress/CProgressBar.js.map +1 -1
  161. package/dist/cjs/components/progress/CProgressStacked.js.map +1 -1
  162. package/dist/cjs/components/progress/index.js.map +1 -1
  163. package/dist/cjs/components/props.js.map +1 -1
  164. package/dist/cjs/components/rating/CRating.js.map +1 -1
  165. package/dist/cjs/components/rating/index.js.map +1 -1
  166. package/dist/cjs/components/sidebar/CSidebar.js.map +1 -1
  167. package/dist/cjs/components/sidebar/CSidebarBrand.js.map +1 -1
  168. package/dist/cjs/components/sidebar/CSidebarFooter.js.map +1 -1
  169. package/dist/cjs/components/sidebar/CSidebarHeader.js.map +1 -1
  170. package/dist/cjs/components/sidebar/CSidebarNav.js.map +1 -1
  171. package/dist/cjs/components/sidebar/CSidebarToggler.js.map +1 -1
  172. package/dist/cjs/components/sidebar/index.js.map +1 -1
  173. package/dist/cjs/components/smart-pagination/CSmartPagination.js.map +1 -1
  174. package/dist/cjs/components/smart-pagination/index.js.map +1 -1
  175. package/dist/cjs/components/smart-table/CSmartTable.d.ts +5 -0
  176. package/dist/cjs/components/smart-table/CSmartTable.js +2 -1
  177. package/dist/cjs/components/smart-table/CSmartTable.js.map +1 -1
  178. package/dist/cjs/components/smart-table/CSmartTableBody.js.map +1 -1
  179. package/dist/cjs/components/smart-table/CSmartTableHead.js +11 -15
  180. package/dist/cjs/components/smart-table/CSmartTableHead.js.map +1 -1
  181. package/dist/cjs/components/smart-table/index.js.map +1 -1
  182. package/dist/cjs/components/smart-table/utils.js.map +1 -1
  183. package/dist/cjs/components/spinner/CSpinner.js.map +1 -1
  184. package/dist/cjs/components/spinner/index.js.map +1 -1
  185. package/dist/cjs/components/table/CTable.js.map +1 -1
  186. package/dist/cjs/components/table/CTableBody.js.map +1 -1
  187. package/dist/cjs/components/table/CTableCaption.js.map +1 -1
  188. package/dist/cjs/components/table/CTableDataCell.js.map +1 -1
  189. package/dist/cjs/components/table/CTableFoot.js.map +1 -1
  190. package/dist/cjs/components/table/CTableHead.js.map +1 -1
  191. package/dist/cjs/components/table/CTableHeaderCell.js.map +1 -1
  192. package/dist/cjs/components/table/CTableRow.js.map +1 -1
  193. package/dist/cjs/components/table/index.js.map +1 -1
  194. package/dist/cjs/components/table/utils.js.map +1 -1
  195. package/dist/cjs/components/tabs/CTab.js.map +1 -1
  196. package/dist/cjs/components/tabs/CTabContent.js.map +1 -1
  197. package/dist/cjs/components/tabs/CTabList.js.map +1 -1
  198. package/dist/cjs/components/tabs/CTabPane.js.map +1 -1
  199. package/dist/cjs/components/tabs/CTabPanel.js.map +1 -1
  200. package/dist/cjs/components/tabs/CTabs.js.map +1 -1
  201. package/dist/cjs/components/tabs/index.js.map +1 -1
  202. package/dist/cjs/components/time-picker/CTimePicker.js.map +1 -1
  203. package/dist/cjs/components/time-picker/CTimePickerRollCol.js +1 -1
  204. package/dist/cjs/components/time-picker/CTimePickerRollCol.js.map +1 -1
  205. package/dist/cjs/components/time-picker/index.js.map +1 -1
  206. package/dist/cjs/components/time-picker/utils.js.map +1 -1
  207. package/dist/cjs/components/toast/CToast.js.map +1 -1
  208. package/dist/cjs/components/toast/CToastBody.js.map +1 -1
  209. package/dist/cjs/components/toast/CToastClose.js.map +1 -1
  210. package/dist/cjs/components/toast/CToastHeader.js.map +1 -1
  211. package/dist/cjs/components/toast/CToaster.js.map +1 -1
  212. package/dist/cjs/components/toast/index.js.map +1 -1
  213. package/dist/cjs/components/tooltip/CTooltip.js +1 -1
  214. package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
  215. package/dist/cjs/components/tooltip/index.js.map +1 -1
  216. package/dist/cjs/components/virtual-scroller/CVirtualScroller.js.map +1 -1
  217. package/dist/cjs/components/virtual-scroller/index.js.map +1 -1
  218. package/dist/cjs/components/widgets/CWidgetStatsA.js.map +1 -1
  219. package/dist/cjs/components/widgets/CWidgetStatsB.js.map +1 -1
  220. package/dist/cjs/components/widgets/CWidgetStatsC.js.map +1 -1
  221. package/dist/cjs/components/widgets/CWidgetStatsD.js.map +1 -1
  222. package/dist/cjs/components/widgets/CWidgetStatsE.js.map +1 -1
  223. package/dist/cjs/components/widgets/CWidgetStatsF.js.map +1 -1
  224. package/dist/cjs/components/widgets/index.js.map +1 -1
  225. package/dist/cjs/composables/index.d.ts +2 -1
  226. package/dist/cjs/composables/useColorModes.js.map +1 -1
  227. package/dist/cjs/composables/useDebouncedCallback.js.map +1 -1
  228. package/dist/cjs/composables/useDropdownWithPopper.d.ts +10 -0
  229. package/dist/cjs/composables/useDropdownWithPopper.js +110 -0
  230. package/dist/cjs/composables/useDropdownWithPopper.js.map +1 -0
  231. package/dist/cjs/composables/useIsVisible.js.map +1 -1
  232. package/dist/cjs/composables/usePopper.js.map +1 -1
  233. package/dist/cjs/composables/useUniqueId.js.map +1 -1
  234. package/dist/cjs/directives/v-c-placeholder.js.map +1 -1
  235. package/dist/cjs/directives/v-c-popover.js.map +1 -1
  236. package/dist/cjs/directives/v-c-tooltip.js.map +1 -1
  237. package/dist/cjs/directives/v-c-visible.js.map +1 -1
  238. package/dist/cjs/index.js +2 -0
  239. package/dist/cjs/index.js.map +1 -1
  240. package/dist/cjs/node_modules/@coreui/icons-vue/dist/index.es.js.map +1 -1
  241. package/dist/cjs/node_modules/is-plain-object/dist/is-plain-object.js.map +1 -1
  242. package/dist/cjs/props.js.map +1 -1
  243. package/dist/cjs/utils/getNextActiveElement.js +1 -1
  244. package/dist/cjs/utils/getNextActiveElement.js.map +1 -1
  245. package/dist/cjs/utils/getRTLPlacement.js.map +1 -1
  246. package/dist/cjs/utils/isInViewport.js.map +1 -1
  247. package/dist/cjs/utils/isObjectInArray.js.map +1 -1
  248. package/dist/cjs/utils/isRTL.js.map +1 -1
  249. package/dist/cjs/utils/transition.js.map +1 -1
  250. package/dist/esm/components/accordion/CAccordion.js.map +1 -1
  251. package/dist/esm/components/accordion/CAccordionBody.js.map +1 -1
  252. package/dist/esm/components/accordion/CAccordionButton.js.map +1 -1
  253. package/dist/esm/components/accordion/CAccordionHeader.js.map +1 -1
  254. package/dist/esm/components/accordion/CAccordionItem.js.map +1 -1
  255. package/dist/esm/components/accordion/index.js.map +1 -1
  256. package/dist/esm/components/alert/CAlert.js.map +1 -1
  257. package/dist/esm/components/alert/CAlertHeading.js.map +1 -1
  258. package/dist/esm/components/alert/CAlertLink.js.map +1 -1
  259. package/dist/esm/components/alert/index.js.map +1 -1
  260. package/dist/esm/components/avatar/CAvatar.js.map +1 -1
  261. package/dist/esm/components/avatar/index.js.map +1 -1
  262. package/dist/esm/components/backdrop/CBackdrop.js.map +1 -1
  263. package/dist/esm/components/backdrop/index.js.map +1 -1
  264. package/dist/esm/components/badge/CBadge.js.map +1 -1
  265. package/dist/esm/components/badge/index.js.map +1 -1
  266. package/dist/esm/components/breadcrumb/CBreadcrumb.js.map +1 -1
  267. package/dist/esm/components/breadcrumb/CBreadcrumbItem.js.map +1 -1
  268. package/dist/esm/components/breadcrumb/index.js.map +1 -1
  269. package/dist/esm/components/button/CButton.js.map +1 -1
  270. package/dist/esm/components/button/index.js.map +1 -1
  271. package/dist/esm/components/button-group/CButtonGroup.js.map +1 -1
  272. package/dist/esm/components/button-group/CButtonToolbar.js.map +1 -1
  273. package/dist/esm/components/button-group/index.js.map +1 -1
  274. package/dist/esm/components/calendar/CCalendar.js +2 -2
  275. package/dist/esm/components/calendar/CCalendar.js.map +1 -1
  276. package/dist/esm/components/calendar/index.js.map +1 -1
  277. package/dist/esm/components/calendar/utils.js +5 -0
  278. package/dist/esm/components/calendar/utils.js.map +1 -1
  279. package/dist/esm/components/callout/CCallout.js.map +1 -1
  280. package/dist/esm/components/callout/index.js.map +1 -1
  281. package/dist/esm/components/card/CCard.js.map +1 -1
  282. package/dist/esm/components/card/CCardBody.js.map +1 -1
  283. package/dist/esm/components/card/CCardFooter.js.map +1 -1
  284. package/dist/esm/components/card/CCardGroup.js.map +1 -1
  285. package/dist/esm/components/card/CCardHeader.js.map +1 -1
  286. package/dist/esm/components/card/CCardImage.js.map +1 -1
  287. package/dist/esm/components/card/CCardImageOverlay.js.map +1 -1
  288. package/dist/esm/components/card/CCardLink.js.map +1 -1
  289. package/dist/esm/components/card/CCardSubtitle.js.map +1 -1
  290. package/dist/esm/components/card/CCardText.js.map +1 -1
  291. package/dist/esm/components/card/CCardTitle.js.map +1 -1
  292. package/dist/esm/components/card/index.js.map +1 -1
  293. package/dist/esm/components/carousel/CCarousel.js.map +1 -1
  294. package/dist/esm/components/carousel/CCarouselCaption.js.map +1 -1
  295. package/dist/esm/components/carousel/CCarouselItem.js.map +1 -1
  296. package/dist/esm/components/carousel/index.js.map +1 -1
  297. package/dist/esm/components/close-button/CCloseButton.js.map +1 -1
  298. package/dist/esm/components/close-button/index.js.map +1 -1
  299. package/dist/esm/components/collapse/CCollapse.js.map +1 -1
  300. package/dist/esm/components/collapse/index.js.map +1 -1
  301. package/dist/esm/components/conditional-teleport/CConditionalTeleport.js.map +1 -1
  302. package/dist/esm/components/conditional-teleport/index.js.map +1 -1
  303. package/dist/esm/components/date-picker/CDatePicker.js.map +1 -1
  304. package/dist/esm/components/date-picker/index.js.map +1 -1
  305. package/dist/esm/components/date-range-picker/CDateRangePicker.js +7 -5
  306. package/dist/esm/components/date-range-picker/CDateRangePicker.js.map +1 -1
  307. package/dist/esm/components/date-range-picker/index.js.map +1 -1
  308. package/dist/esm/components/date-range-picker/utils.js.map +1 -1
  309. package/dist/esm/components/dropdown/CDropdown.d.ts +1 -1
  310. package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
  311. package/dist/esm/components/dropdown/CDropdownDivider.js.map +1 -1
  312. package/dist/esm/components/dropdown/CDropdownHeader.js.map +1 -1
  313. package/dist/esm/components/dropdown/CDropdownItem.js.map +1 -1
  314. package/dist/esm/components/dropdown/CDropdownMenu.js.map +1 -1
  315. package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
  316. package/dist/esm/components/dropdown/index.js.map +1 -1
  317. package/dist/esm/components/dropdown/utils.js.map +1 -1
  318. package/dist/esm/components/element-cover/CElementCover.js.map +1 -1
  319. package/dist/esm/components/element-cover/index.js.map +1 -1
  320. package/dist/esm/components/footer/CFooter.js.map +1 -1
  321. package/dist/esm/components/footer/index.js.map +1 -1
  322. package/dist/esm/components/form/CForm.js.map +1 -1
  323. package/dist/esm/components/form/CFormCheck.js.map +1 -1
  324. package/dist/esm/components/form/CFormControlValidation.js.map +1 -1
  325. package/dist/esm/components/form/CFormControlWrapper.js.map +1 -1
  326. package/dist/esm/components/form/CFormFeedback.js.map +1 -1
  327. package/dist/esm/components/form/CFormFloating.js.map +1 -1
  328. package/dist/esm/components/form/CFormInput.js.map +1 -1
  329. package/dist/esm/components/form/CFormLabel.js.map +1 -1
  330. package/dist/esm/components/form/CFormRange.js.map +1 -1
  331. package/dist/esm/components/form/CFormSelect.js.map +1 -1
  332. package/dist/esm/components/form/CFormSwitch.js.map +1 -1
  333. package/dist/esm/components/form/CFormText.js.map +1 -1
  334. package/dist/esm/components/form/CFormTextarea.js.map +1 -1
  335. package/dist/esm/components/form/CInputGroup.js.map +1 -1
  336. package/dist/esm/components/form/CInputGroupText.js.map +1 -1
  337. package/dist/esm/components/form/index.js.map +1 -1
  338. package/dist/esm/components/grid/CCol.js.map +1 -1
  339. package/dist/esm/components/grid/CContainer.js.map +1 -1
  340. package/dist/esm/components/grid/CRow.js.map +1 -1
  341. package/dist/esm/components/grid/index.js.map +1 -1
  342. package/dist/esm/components/header/CHeader.js.map +1 -1
  343. package/dist/esm/components/header/CHeaderBrand.js.map +1 -1
  344. package/dist/esm/components/header/CHeaderDivider.js.map +1 -1
  345. package/dist/esm/components/header/CHeaderNav.js.map +1 -1
  346. package/dist/esm/components/header/CHeaderText.js.map +1 -1
  347. package/dist/esm/components/header/CHeaderToggler.js.map +1 -1
  348. package/dist/esm/components/header/index.js.map +1 -1
  349. package/dist/esm/components/image/CImage.js.map +1 -1
  350. package/dist/esm/components/image/index.js.map +1 -1
  351. package/dist/esm/components/link/CLink.js.map +1 -1
  352. package/dist/esm/components/link/index.js.map +1 -1
  353. package/dist/esm/components/list-group/CListGroup.js.map +1 -1
  354. package/dist/esm/components/list-group/CListGroupItem.js.map +1 -1
  355. package/dist/esm/components/list-group/index.js.map +1 -1
  356. package/dist/esm/components/loading-button/CLoadingButton.js.map +1 -1
  357. package/dist/esm/components/loading-button/index.js.map +1 -1
  358. package/dist/esm/components/modal/CModal.js.map +1 -1
  359. package/dist/esm/components/modal/CModalBody.js.map +1 -1
  360. package/dist/esm/components/modal/CModalFooter.js.map +1 -1
  361. package/dist/esm/components/modal/CModalHeader.js.map +1 -1
  362. package/dist/esm/components/modal/CModalTitle.js.map +1 -1
  363. package/dist/esm/components/modal/index.js.map +1 -1
  364. package/dist/esm/components/multi-select/CMultiSelect.d.ts +75 -8
  365. package/dist/esm/components/multi-select/CMultiSelect.js +192 -131
  366. package/dist/esm/components/multi-select/CMultiSelect.js.map +1 -1
  367. package/dist/esm/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
  368. package/dist/esm/components/multi-select/CMultiSelectOptions.js.map +1 -1
  369. package/dist/esm/components/multi-select/CMultiSelectSelection.d.ts +15 -3
  370. package/dist/esm/components/multi-select/CMultiSelectSelection.js +26 -2
  371. package/dist/esm/components/multi-select/CMultiSelectSelection.js.map +1 -1
  372. package/dist/esm/components/multi-select/index.js.map +1 -1
  373. package/dist/esm/components/multi-select/types.d.ts +4 -0
  374. package/dist/esm/components/multi-select/utils.d.ts +5 -2
  375. package/dist/esm/components/multi-select/utils.js +16 -2
  376. package/dist/esm/components/multi-select/utils.js.map +1 -1
  377. package/dist/esm/components/nav/CNav.js.map +1 -1
  378. package/dist/esm/components/nav/CNavGroup.js.map +1 -1
  379. package/dist/esm/components/nav/CNavGroupItems.js.map +1 -1
  380. package/dist/esm/components/nav/CNavItem.d.ts +4 -2
  381. package/dist/esm/components/nav/CNavItem.js +12 -1
  382. package/dist/esm/components/nav/CNavItem.js.map +1 -1
  383. package/dist/esm/components/nav/CNavLink.js.map +1 -1
  384. package/dist/esm/components/nav/CNavTitle.js.map +1 -1
  385. package/dist/esm/components/nav/index.js.map +1 -1
  386. package/dist/esm/components/navbar/CNavbar.js.map +1 -1
  387. package/dist/esm/components/navbar/CNavbarBrand.js.map +1 -1
  388. package/dist/esm/components/navbar/CNavbarNav.js.map +1 -1
  389. package/dist/esm/components/navbar/CNavbarText.js.map +1 -1
  390. package/dist/esm/components/navbar/CNavbarToggler.js.map +1 -1
  391. package/dist/esm/components/navbar/index.js.map +1 -1
  392. package/dist/esm/components/offcanvas/COffcanvas.js.map +1 -1
  393. package/dist/esm/components/offcanvas/COffcanvasBody.js.map +1 -1
  394. package/dist/esm/components/offcanvas/COffcanvasHeader.js.map +1 -1
  395. package/dist/esm/components/offcanvas/COffcanvasTitle.js.map +1 -1
  396. package/dist/esm/components/offcanvas/index.js.map +1 -1
  397. package/dist/esm/components/pagination/CPagination.js.map +1 -1
  398. package/dist/esm/components/pagination/CPaginationItem.js.map +1 -1
  399. package/dist/esm/components/pagination/index.js.map +1 -1
  400. package/dist/esm/components/picker/CPicker.js.map +1 -1
  401. package/dist/esm/components/picker/index.js.map +1 -1
  402. package/dist/esm/components/placeholder/CPlaceholder.js.map +1 -1
  403. package/dist/esm/components/placeholder/index.js.map +1 -1
  404. package/dist/esm/components/popover/CPopover.js +1 -1
  405. package/dist/esm/components/popover/CPopover.js.map +1 -1
  406. package/dist/esm/components/popover/index.js.map +1 -1
  407. package/dist/esm/components/progress/CProgress.js.map +1 -1
  408. package/dist/esm/components/progress/CProgressBar.js.map +1 -1
  409. package/dist/esm/components/progress/CProgressStacked.js.map +1 -1
  410. package/dist/esm/components/progress/index.js.map +1 -1
  411. package/dist/esm/components/props.js.map +1 -1
  412. package/dist/esm/components/rating/CRating.js.map +1 -1
  413. package/dist/esm/components/rating/index.js.map +1 -1
  414. package/dist/esm/components/sidebar/CSidebar.js.map +1 -1
  415. package/dist/esm/components/sidebar/CSidebarBrand.js.map +1 -1
  416. package/dist/esm/components/sidebar/CSidebarFooter.js.map +1 -1
  417. package/dist/esm/components/sidebar/CSidebarHeader.js.map +1 -1
  418. package/dist/esm/components/sidebar/CSidebarNav.js.map +1 -1
  419. package/dist/esm/components/sidebar/CSidebarToggler.js.map +1 -1
  420. package/dist/esm/components/sidebar/index.js.map +1 -1
  421. package/dist/esm/components/smart-pagination/CSmartPagination.js.map +1 -1
  422. package/dist/esm/components/smart-pagination/index.js.map +1 -1
  423. package/dist/esm/components/smart-table/CSmartTable.d.ts +5 -0
  424. package/dist/esm/components/smart-table/CSmartTable.js +2 -1
  425. package/dist/esm/components/smart-table/CSmartTable.js.map +1 -1
  426. package/dist/esm/components/smart-table/CSmartTableBody.js.map +1 -1
  427. package/dist/esm/components/smart-table/CSmartTableHead.js +11 -15
  428. package/dist/esm/components/smart-table/CSmartTableHead.js.map +1 -1
  429. package/dist/esm/components/smart-table/index.js.map +1 -1
  430. package/dist/esm/components/smart-table/utils.js.map +1 -1
  431. package/dist/esm/components/spinner/CSpinner.js.map +1 -1
  432. package/dist/esm/components/spinner/index.js.map +1 -1
  433. package/dist/esm/components/table/CTable.js.map +1 -1
  434. package/dist/esm/components/table/CTableBody.js.map +1 -1
  435. package/dist/esm/components/table/CTableCaption.js.map +1 -1
  436. package/dist/esm/components/table/CTableDataCell.js.map +1 -1
  437. package/dist/esm/components/table/CTableFoot.js.map +1 -1
  438. package/dist/esm/components/table/CTableHead.js.map +1 -1
  439. package/dist/esm/components/table/CTableHeaderCell.js.map +1 -1
  440. package/dist/esm/components/table/CTableRow.js.map +1 -1
  441. package/dist/esm/components/table/index.js.map +1 -1
  442. package/dist/esm/components/table/utils.js.map +1 -1
  443. package/dist/esm/components/tabs/CTab.js.map +1 -1
  444. package/dist/esm/components/tabs/CTabContent.js.map +1 -1
  445. package/dist/esm/components/tabs/CTabList.js.map +1 -1
  446. package/dist/esm/components/tabs/CTabPane.js.map +1 -1
  447. package/dist/esm/components/tabs/CTabPanel.js.map +1 -1
  448. package/dist/esm/components/tabs/CTabs.js.map +1 -1
  449. package/dist/esm/components/tabs/index.js.map +1 -1
  450. package/dist/esm/components/time-picker/CTimePicker.js.map +1 -1
  451. package/dist/esm/components/time-picker/CTimePickerRollCol.js +1 -1
  452. package/dist/esm/components/time-picker/CTimePickerRollCol.js.map +1 -1
  453. package/dist/esm/components/time-picker/index.js.map +1 -1
  454. package/dist/esm/components/time-picker/utils.js.map +1 -1
  455. package/dist/esm/components/toast/CToast.js.map +1 -1
  456. package/dist/esm/components/toast/CToastBody.js.map +1 -1
  457. package/dist/esm/components/toast/CToastClose.js.map +1 -1
  458. package/dist/esm/components/toast/CToastHeader.js.map +1 -1
  459. package/dist/esm/components/toast/CToaster.js.map +1 -1
  460. package/dist/esm/components/toast/index.js.map +1 -1
  461. package/dist/esm/components/tooltip/CTooltip.js +1 -1
  462. package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
  463. package/dist/esm/components/tooltip/index.js.map +1 -1
  464. package/dist/esm/components/virtual-scroller/CVirtualScroller.js.map +1 -1
  465. package/dist/esm/components/virtual-scroller/index.js.map +1 -1
  466. package/dist/esm/components/widgets/CWidgetStatsA.js.map +1 -1
  467. package/dist/esm/components/widgets/CWidgetStatsB.js.map +1 -1
  468. package/dist/esm/components/widgets/CWidgetStatsC.js.map +1 -1
  469. package/dist/esm/components/widgets/CWidgetStatsD.js.map +1 -1
  470. package/dist/esm/components/widgets/CWidgetStatsE.js.map +1 -1
  471. package/dist/esm/components/widgets/CWidgetStatsF.js.map +1 -1
  472. package/dist/esm/components/widgets/index.js.map +1 -1
  473. package/dist/esm/composables/index.d.ts +2 -1
  474. package/dist/esm/composables/useColorModes.js.map +1 -1
  475. package/dist/esm/composables/useDebouncedCallback.js.map +1 -1
  476. package/dist/esm/composables/useDropdownWithPopper.d.ts +10 -0
  477. package/dist/esm/composables/useDropdownWithPopper.js +108 -0
  478. package/dist/esm/composables/useDropdownWithPopper.js.map +1 -0
  479. package/dist/esm/composables/useIsVisible.js.map +1 -1
  480. package/dist/esm/composables/usePopper.js.map +1 -1
  481. package/dist/esm/composables/useUniqueId.js.map +1 -1
  482. package/dist/esm/directives/v-c-placeholder.js.map +1 -1
  483. package/dist/esm/directives/v-c-popover.js.map +1 -1
  484. package/dist/esm/directives/v-c-tooltip.js.map +1 -1
  485. package/dist/esm/directives/v-c-visible.js.map +1 -1
  486. package/dist/esm/index.js +1 -0
  487. package/dist/esm/index.js.map +1 -1
  488. package/dist/esm/node_modules/@coreui/icons-vue/dist/index.es.js.map +1 -1
  489. package/dist/esm/node_modules/is-plain-object/dist/is-plain-object.js.map +1 -1
  490. package/dist/esm/props.js.map +1 -1
  491. package/dist/esm/utils/getNextActiveElement.js +1 -1
  492. package/dist/esm/utils/getNextActiveElement.js.map +1 -1
  493. package/dist/esm/utils/getRTLPlacement.js.map +1 -1
  494. package/dist/esm/utils/isInViewport.js.map +1 -1
  495. package/dist/esm/utils/isObjectInArray.js.map +1 -1
  496. package/dist/esm/utils/isRTL.js.map +1 -1
  497. package/dist/esm/utils/transition.js.map +1 -1
  498. package/package.json +9 -9
  499. package/src/components/calendar/CCalendar.ts +2 -2
  500. package/src/components/calendar/utils.ts +6 -0
  501. package/src/components/date-range-picker/CDateRangePicker.ts +12 -7
  502. package/src/components/multi-select/CMultiSelect.ts +286 -180
  503. package/src/components/multi-select/CMultiSelectSelection.ts +32 -3
  504. package/src/components/multi-select/types.ts +9 -0
  505. package/src/components/multi-select/utils.ts +26 -1
  506. package/src/components/nav/CNavItem.ts +12 -1
  507. package/src/components/smart-table/CSmartTable.ts +3 -2
  508. package/src/components/smart-table/CSmartTableHead.ts +15 -16
  509. package/src/composables/index.ts +9 -1
  510. package/src/composables/useDropdownWithPopper.ts +130 -0
@@ -1,5 +1,5 @@
1
1
  import { PropType } from 'vue';
2
- import type { Option, OptionsGroup } from './types';
2
+ import type { Option, OptionsGroup, Search } from './types';
3
3
  declare const CMultiSelect: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
4
  /**
5
5
  * Allow users to create options if they are not in the list of options.
@@ -7,6 +7,15 @@ declare const CMultiSelect: import("vue").DefineComponent<import("vue").ExtractP
7
7
  * @since 4.9.0
8
8
  */
9
9
  allowCreateOptions: BooleanConstructor;
10
+ /**
11
+ * A string that provides an accessible label for the cleaner button. This label is read by screen readers to describe the action associated with the button.
12
+ *
13
+ * @since 5.7.0
14
+ */
15
+ ariaCleanerLabel: {
16
+ type: StringConstructor;
17
+ default: string;
18
+ };
10
19
  /**
11
20
  * Enables selection cleaner element.
12
21
  *
@@ -16,6 +25,15 @@ declare const CMultiSelect: import("vue").DefineComponent<import("vue").ExtractP
16
25
  type: BooleanConstructor;
17
26
  default: boolean;
18
27
  };
28
+ /**
29
+ * Appends the dropdown to a specific element. You can pass an HTML element or function that returns a single element.
30
+ *
31
+ * @since 5.7.0
32
+ */
33
+ container: {
34
+ type: PropType<HTMLElement | (() => HTMLElement) | string>;
35
+ default: string;
36
+ };
19
37
  /**
20
38
  * Clear current search on selecting an item.
21
39
  *
@@ -131,12 +149,17 @@ declare const CMultiSelect: import("vue").DefineComponent<import("vue").ExtractP
131
149
  */
132
150
  resetSelectionOnOptionsChange: BooleanConstructor;
133
151
  /**
134
- * Enables search input element.
152
+ * The `search` prop determines how the search input element is enabled and behaves. It accepts multiple types to provide flexibility in configuring search behavior:
153
+ *
154
+ * - `true` : Enables the default search input element with standard behavior.
155
+ * - `'external'`: Enables an external search mechanism, possibly integrating with external APIs or services.
156
+ * - `'global'`: When set, the user can perform searches across the entire component, regardless of where their focus is within the component.
157
+ * - `{ external?: boolean; global?: boolean }`: Allows for granular control over the search behavior by specifying individual properties. It is useful when you also want to use external and global search.
135
158
  */
136
159
  search: {
137
- type: (StringConstructor | BooleanConstructor)[];
160
+ type: PropType<Search>;
138
161
  default: boolean;
139
- validator: (value: boolean | string) => boolean;
162
+ validator: (value: boolean | object | string) => boolean;
140
163
  };
141
164
  /**
142
165
  * Sets the label for no results when filtering.
@@ -192,6 +215,15 @@ declare const CMultiSelect: import("vue").DefineComponent<import("vue").ExtractP
192
215
  type: StringConstructor;
193
216
  validator: (value: string) => boolean;
194
217
  };
218
+ /**
219
+ * Generates dropdown menu using Teleport.
220
+ *
221
+ * @since 5.7.0
222
+ */
223
+ teleport: {
224
+ type: BooleanConstructor[];
225
+ default: boolean;
226
+ };
195
227
  /**
196
228
  * Add helper text to the component.
197
229
  *
@@ -241,6 +273,15 @@ declare const CMultiSelect: import("vue").DefineComponent<import("vue").ExtractP
241
273
  * @since 4.9.0
242
274
  */
243
275
  allowCreateOptions: BooleanConstructor;
276
+ /**
277
+ * A string that provides an accessible label for the cleaner button. This label is read by screen readers to describe the action associated with the button.
278
+ *
279
+ * @since 5.7.0
280
+ */
281
+ ariaCleanerLabel: {
282
+ type: StringConstructor;
283
+ default: string;
284
+ };
244
285
  /**
245
286
  * Enables selection cleaner element.
246
287
  *
@@ -250,6 +291,15 @@ declare const CMultiSelect: import("vue").DefineComponent<import("vue").ExtractP
250
291
  type: BooleanConstructor;
251
292
  default: boolean;
252
293
  };
294
+ /**
295
+ * Appends the dropdown to a specific element. You can pass an HTML element or function that returns a single element.
296
+ *
297
+ * @since 5.7.0
298
+ */
299
+ container: {
300
+ type: PropType<HTMLElement | (() => HTMLElement) | string>;
301
+ default: string;
302
+ };
253
303
  /**
254
304
  * Clear current search on selecting an item.
255
305
  *
@@ -365,12 +415,17 @@ declare const CMultiSelect: import("vue").DefineComponent<import("vue").ExtractP
365
415
  */
366
416
  resetSelectionOnOptionsChange: BooleanConstructor;
367
417
  /**
368
- * Enables search input element.
418
+ * The `search` prop determines how the search input element is enabled and behaves. It accepts multiple types to provide flexibility in configuring search behavior:
419
+ *
420
+ * - `true` : Enables the default search input element with standard behavior.
421
+ * - `'external'`: Enables an external search mechanism, possibly integrating with external APIs or services.
422
+ * - `'global'`: When set, the user can perform searches across the entire component, regardless of where their focus is within the component.
423
+ * - `{ external?: boolean; global?: boolean }`: Allows for granular control over the search behavior by specifying individual properties. It is useful when you also want to use external and global search.
369
424
  */
370
425
  search: {
371
- type: (StringConstructor | BooleanConstructor)[];
426
+ type: PropType<Search>;
372
427
  default: boolean;
373
- validator: (value: boolean | string) => boolean;
428
+ validator: (value: boolean | object | string) => boolean;
374
429
  };
375
430
  /**
376
431
  * Sets the label for no results when filtering.
@@ -426,6 +481,15 @@ declare const CMultiSelect: import("vue").DefineComponent<import("vue").ExtractP
426
481
  type: StringConstructor;
427
482
  validator: (value: string) => boolean;
428
483
  };
484
+ /**
485
+ * Generates dropdown menu using Teleport.
486
+ *
487
+ * @since 5.7.0
488
+ */
489
+ teleport: {
490
+ type: BooleanConstructor[];
491
+ default: boolean;
492
+ };
429
493
  /**
430
494
  * Add helper text to the component.
431
495
  *
@@ -472,12 +536,14 @@ declare const CMultiSelect: import("vue").DefineComponent<import("vue").ExtractP
472
536
  onShow?: ((...args: any[]) => any) | undefined;
473
537
  onFilterChange?: ((...args: any[]) => any) | undefined;
474
538
  }>, {
475
- search: string | boolean;
539
+ search: Search;
476
540
  invalid: boolean;
477
541
  visible: boolean;
478
542
  disabled: boolean;
479
543
  required: boolean;
480
544
  selectionType: string;
545
+ container: string | HTMLElement | (() => HTMLElement);
546
+ teleport: boolean;
481
547
  valid: boolean;
482
548
  tooltipFeedback: boolean;
483
549
  options: (Option | OptionsGroup)[];
@@ -494,6 +560,7 @@ declare const CMultiSelect: import("vue").DefineComponent<import("vue").ExtractP
494
560
  allowCreateOptions: boolean;
495
561
  clearSearchOnSelect: boolean;
496
562
  resetSelectionOnOptionsChange: boolean;
563
+ ariaCleanerLabel: string;
497
564
  selectAll: boolean;
498
565
  selectAllLabel: string;
499
566
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -1,11 +1,13 @@
1
- import { defineComponent, ref, provide, computed, watch, onBeforeUnmount, h } from 'vue';
2
- import { createPopper } from '@popperjs/core';
1
+ import { defineComponent, ref, provide, computed, watch, h } from 'vue';
3
2
  import { CFormControlWrapper } from '../form/CFormControlWrapper.js';
3
+ import { CConditionalTeleport } from '../conditional-teleport/CConditionalTeleport.js';
4
4
  import { CMultiSelectNativeSelect } from './CMultiSelectNativeSelect.js';
5
5
  import { CMultiSelectOptions } from './CMultiSelectOptions.js';
6
6
  import { CMultiSelectSelection } from './CMultiSelectSelection.js';
7
- import isRTL from '../../utils/isRTL.js';
8
- import { flattenOptionsArray, filterOptionsList, createOption, selectOptions } from './utils.js';
7
+ import { useDropdownWithPopper } from '../../composables/useDropdownWithPopper.js';
8
+ import '@popperjs/core';
9
+ import getNextActiveElement from '../../utils/getNextActiveElement.js';
10
+ import { flattenOptionsArray, isExternalSearch, filterOptionsList, createOption, selectOptions, getOptionsList, isGlobalSearch } from './utils.js';
9
11
 
10
12
  const CMultiSelect = defineComponent({
11
13
  name: 'CMultiSelect',
@@ -16,6 +18,15 @@ const CMultiSelect = defineComponent({
16
18
  * @since 4.9.0
17
19
  */
18
20
  allowCreateOptions: Boolean,
21
+ /**
22
+ * A string that provides an accessible label for the cleaner button. This label is read by screen readers to describe the action associated with the button.
23
+ *
24
+ * @since 5.7.0
25
+ */
26
+ ariaCleanerLabel: {
27
+ type: String,
28
+ default: 'Clear all selections',
29
+ },
19
30
  /**
20
31
  * Enables selection cleaner element.
21
32
  *
@@ -25,6 +36,15 @@ const CMultiSelect = defineComponent({
25
36
  type: Boolean,
26
37
  default: true,
27
38
  },
39
+ /**
40
+ * Appends the dropdown to a specific element. You can pass an HTML element or function that returns a single element.
41
+ *
42
+ * @since 5.7.0
43
+ */
44
+ container: {
45
+ type: [Object, String],
46
+ default: 'body',
47
+ },
28
48
  /**
29
49
  * Clear current search on selecting an item.
30
50
  *
@@ -142,18 +162,35 @@ const CMultiSelect = defineComponent({
142
162
  */
143
163
  resetSelectionOnOptionsChange: Boolean,
144
164
  /**
145
- * Enables search input element.
165
+ * The `search` prop determines how the search input element is enabled and behaves. It accepts multiple types to provide flexibility in configuring search behavior:
166
+ *
167
+ * - `true` : Enables the default search input element with standard behavior.
168
+ * - `'external'`: Enables an external search mechanism, possibly integrating with external APIs or services.
169
+ * - `'global'`: When set, the user can perform searches across the entire component, regardless of where their focus is within the component.
170
+ * - `{ external?: boolean; global?: boolean }`: Allows for granular control over the search behavior by specifying individual properties. It is useful when you also want to use external and global search.
146
171
  */
147
172
  search: {
148
- type: [Boolean, String],
173
+ type: [Boolean, String, Object],
149
174
  default: true,
150
175
  validator: (value) => {
151
- if (typeof value == 'string') {
152
- return ['external'].includes(value);
153
- }
154
176
  if (typeof value == 'boolean') {
155
177
  return true;
156
178
  }
179
+ if (typeof value == 'string') {
180
+ return ['external', 'global'].includes(value);
181
+ }
182
+ if (typeof value === 'object' && value !== null) {
183
+ // Ensure that all keys are either 'external' or 'global'
184
+ const validKeys = ['external', 'global'];
185
+ const keys = Object.keys(value);
186
+ const allKeysValid = keys.every((key) => validKeys.includes(key));
187
+ if (!allKeysValid) {
188
+ return false;
189
+ }
190
+ // Ensure that all values corresponding to the keys are boolean
191
+ const allValuesBoolean = keys.every((key) => typeof value[key] === 'boolean');
192
+ return allValuesBoolean;
193
+ }
157
194
  return false;
158
195
  },
159
196
  },
@@ -215,6 +252,15 @@ const CMultiSelect = defineComponent({
215
252
  return ['sm', 'lg'].includes(value);
216
253
  },
217
254
  },
255
+ /**
256
+ * Generates dropdown menu using Teleport.
257
+ *
258
+ * @since 5.7.0
259
+ */
260
+ teleport: {
261
+ type: [Boolean],
262
+ default: false,
263
+ },
218
264
  /**
219
265
  * Add helper text to the component.
220
266
  *
@@ -278,20 +324,16 @@ const CMultiSelect = defineComponent({
278
324
  ],
279
325
  setup(props, { attrs, emit, slots }) {
280
326
  const multiSelectRef = ref();
281
- const dropdownRef = ref();
282
327
  const nativeSelectRef = ref();
283
- const togglerRef = ref();
284
328
  const searchRef = ref();
285
- const options = ref(props.options);
286
- const popper = ref();
287
329
  const searchValue = ref('');
288
330
  const selected = ref([]);
289
331
  const userOptions = ref([]);
290
- const visible = ref(props.visible);
332
+ const { dropdownMenuElement, dropdownRefElement, isOpen, closeDropdown, openDropdown, toggleDropdown, updatePopper, } = useDropdownWithPopper();
291
333
  provide('nativeSelectRef', nativeSelectRef);
292
- const filteredOptions = computed(() => flattenOptionsArray(props.search === 'external'
293
- ? [...options.value, ...filterOptionsList(searchValue.value, userOptions.value)]
294
- : filterOptionsList(searchValue.value, [...options.value, ...userOptions.value]), true));
334
+ const filteredOptions = computed(() => flattenOptionsArray(isExternalSearch(props.search)
335
+ ? [...props.options, ...filterOptionsList(searchValue.value, userOptions.value)]
336
+ : filterOptionsList(searchValue.value, [...props.options, ...userOptions.value]), true));
295
337
  const flattenedOptions = computed(() => flattenOptionsArray(props.options));
296
338
  const userOption = computed(() => {
297
339
  if (props.allowCreateOptions &&
@@ -300,37 +342,38 @@ const CMultiSelect = defineComponent({
300
342
  }
301
343
  return searchRef.value && createOption(String(searchValue.value), flattenedOptions.value);
302
344
  });
303
- watch(() => props.options, (newValue, oldValue) => {
304
- if (JSON.stringify(newValue) !== JSON.stringify(oldValue)) {
305
- options.value = newValue;
306
- if (props.resetSelectionOnOptionsChange) {
307
- selected.value = [];
308
- return;
309
- }
310
- const _selected = flattenedOptions.value.filter((option) => option.selected === true);
311
- const deselected = flattenedOptions.value.filter((option) => option.selected === false);
312
- if (_selected) {
313
- selected.value = selectOptions(_selected, selected.value, deselected);
314
- }
345
+ watch(flattenedOptions, () => {
346
+ if (props.resetSelectionOnOptionsChange) {
347
+ selected.value = [];
348
+ return;
349
+ }
350
+ const _selected = flattenedOptions.value.filter((option) => option.selected === true);
351
+ const deselected = flattenedOptions.value.filter((option) => option.selected === false);
352
+ if (_selected.length > 0) {
353
+ selected.value = selectOptions(props.multiple, _selected, selected.value, deselected);
315
354
  }
316
355
  }, { immediate: true });
317
356
  watch(selected, () => {
318
- nativeSelectRef.value &&
319
- nativeSelectRef.value.dispatchEvent(new Event('change', { bubbles: true }));
320
- if (popper.value) {
321
- popper.value.update();
357
+ nativeSelectRef.value?.dispatchEvent(new Event('change', { bubbles: true }));
358
+ updatePopper();
359
+ });
360
+ watch(() => props.visible, (visible) => {
361
+ if (visible) {
362
+ openDropdown();
363
+ }
364
+ else {
365
+ closeDropdown();
322
366
  }
367
+ }, {
368
+ immediate: true,
323
369
  });
324
- watch(visible, () => {
325
- if (visible.value) {
370
+ watch(isOpen, () => {
371
+ if (isOpen.value) {
326
372
  emit('show');
327
- window.addEventListener('mouseup', handleMouseUp);
328
- window.addEventListener('keyup', handleKeyUp);
329
- initPopper();
330
- // TODO: find better solution
331
- setTimeout(() => {
332
- searchRef.value && searchRef.value.focus();
333
- }, 100);
373
+ if (props.teleport && dropdownMenuElement.value && dropdownRefElement.value) {
374
+ dropdownMenuElement.value.style.minWidth = `${dropdownRefElement.value.offsetWidth}px`;
375
+ }
376
+ searchRef.value?.focus();
334
377
  return;
335
378
  }
336
379
  emit('hide');
@@ -338,58 +381,26 @@ const CMultiSelect = defineComponent({
338
381
  if (searchRef.value) {
339
382
  searchRef.value.value = '';
340
383
  }
341
- window.removeEventListener('mouseup', handleMouseUp);
342
- window.removeEventListener('keyup', handleKeyUp);
343
- destroyPopper();
344
384
  });
345
- onBeforeUnmount(() => {
346
- window.removeEventListener('mouseup', handleMouseUp);
347
- window.removeEventListener('keyup', handleKeyUp);
348
- });
349
- const initPopper = () => {
350
- if (togglerRef.value && dropdownRef.value) {
351
- popper.value = createPopper(togglerRef.value, dropdownRef.value, {
352
- placement: isRTL() ? 'bottom-end' : 'bottom-start',
353
- modifiers: [
354
- {
355
- name: 'preventOverflow',
356
- options: {
357
- boundary: 'clippingParents',
358
- },
359
- },
360
- {
361
- name: 'offset',
362
- options: {
363
- offset: [0, 2],
364
- },
365
- },
366
- ],
367
- });
368
- }
369
- };
370
- const destroyPopper = () => {
371
- if (popper.value) {
372
- popper.value.destroy();
373
- }
374
- popper.value = undefined;
375
- };
376
- const handleKeyUp = (event) => {
377
- if (event.key === 'Escape') {
378
- visible.value = false;
379
- }
380
- };
381
- const handleMouseUp = (event) => {
382
- if (multiSelectRef.value && multiSelectRef.value.contains(event.target)) {
383
- return;
384
- }
385
- visible.value = false;
386
- };
387
385
  const handleSearchChange = (event) => {
388
386
  const target = event.target;
389
387
  searchValue.value = target.value.toLowerCase();
390
388
  emit('filterChange', target.value);
391
389
  };
392
390
  const handleSearchKeyDown = (event) => {
391
+ if (!isOpen.value) {
392
+ openDropdown();
393
+ }
394
+ if (event.key === 'ArrowDown' &&
395
+ dropdownMenuElement.value &&
396
+ searchRef.value &&
397
+ searchRef.value.value.length === searchRef.value.selectionStart) {
398
+ event.preventDefault();
399
+ const items = getOptionsList(dropdownMenuElement.value);
400
+ const target = event.target;
401
+ getNextActiveElement(items, target, event.key === 'ArrowDown', !items.includes(target)).focus();
402
+ return;
403
+ }
393
404
  if (event.key === 'Enter' && searchValue.value && props.allowCreateOptions) {
394
405
  event.preventDefault();
395
406
  if (!userOption.value) {
@@ -418,10 +429,30 @@ const CMultiSelect = defineComponent({
418
429
  }
419
430
  }
420
431
  };
421
- const handleOptionClick = (option) => {
432
+ const handleTogglerKeyDown = (event) => {
433
+ if (!isOpen.value && (event.key === 'Enter' || event.key === 'ArrowDown')) {
434
+ event.preventDefault();
435
+ openDropdown();
436
+ return;
437
+ }
438
+ if (isOpen && dropdownMenuElement.value && event.key === 'ArrowDown') {
439
+ event.preventDefault();
440
+ const items = getOptionsList(dropdownMenuElement.value);
441
+ const target = event.target;
442
+ getNextActiveElement(items, target, event.key === 'ArrowDown', !items.includes(target)).focus();
443
+ }
444
+ };
445
+ const handleGlobalSearch = (event) => {
446
+ if (isGlobalSearch(props.search) &&
447
+ searchRef.value &&
448
+ (event.key.length === 1 || event.key === 'Backspace' || event.key === 'Delete')) {
449
+ searchRef.value.focus();
450
+ }
451
+ };
452
+ const handleOnOptionClick = (option) => {
422
453
  if (!props.multiple) {
423
454
  selected.value = [option];
424
- visible.value = false;
455
+ closeDropdown();
425
456
  if (searchRef.value) {
426
457
  searchRef.value.value = '';
427
458
  }
@@ -445,7 +476,7 @@ const CMultiSelect = defineComponent({
445
476
  }
446
477
  };
447
478
  const handleSelectAll = () => {
448
- selected.value = selectOptions([
479
+ selected.value = selectOptions(props.multiple, [
449
480
  ...flattenedOptions.value.filter((option) => !option.disabled),
450
481
  ...userOptions.value,
451
482
  ], selected.value);
@@ -487,32 +518,38 @@ const CMultiSelect = defineComponent({
487
518
  [`form-multi-select-${props.size}`]: props.size,
488
519
  'is-invalid': props.invalid,
489
520
  'is-valid': props.valid,
490
- show: visible.value,
521
+ show: isOpen.value,
491
522
  },
492
523
  ],
493
- 'aria-expanded': visible.value,
524
+ onKeydown: handleGlobalSearch,
525
+ 'aria-expanded': isOpen.value,
494
526
  ref: multiSelectRef,
495
527
  }, {
496
528
  default: () => [
497
529
  h('div', {
498
530
  class: 'form-multi-select-input-group',
531
+ ...(!props.search && !props.disabled && { tabIndex: 0 }),
499
532
  onClick: () => {
500
- visible.value = true;
533
+ if (!props.disabled) {
534
+ openDropdown();
535
+ }
501
536
  },
502
- ref: togglerRef,
537
+ onKeydown: handleTogglerKeyDown,
538
+ ref: dropdownRefElement,
503
539
  }, {
504
540
  default: () => [
505
541
  h(CMultiSelectSelection, {
542
+ disabled: props.disabled,
506
543
  multiple: props.multiple,
507
544
  placeholder: props.placeholder,
508
- onRemove: (option) => !props.disabled && handleOptionClick(option),
545
+ onRemove: (option) => !props.disabled && handleOnOptionClick(option),
509
546
  search: props.search,
510
547
  selected: selected.value,
511
548
  selectionType: props.selectionType,
512
549
  selectionTypeCounterText: props.selectionTypeCounterText,
513
550
  }, {
514
- default: () => props.search &&
515
- h('input', {
551
+ default: () => props.search
552
+ ? h('input', {
516
553
  type: 'text',
517
554
  class: 'form-multi-select-search',
518
555
  disabled: props.disabled,
@@ -536,56 +573,80 @@ const CMultiSelect = defineComponent({
536
573
  size: searchValue.value.length + 2,
537
574
  }),
538
575
  ref: searchRef,
539
- }),
576
+ })
577
+ : selected.value.length === 0 &&
578
+ h('span', {
579
+ class: 'form-multi-select-placeholder',
580
+ }, {
581
+ default: () => props.placeholder,
582
+ }),
540
583
  }),
541
584
  h('div', { class: 'form-multi-select-buttons' }, {
542
585
  default: () => [
543
- h('button', {
544
- class: 'form-multi-select-cleaner',
545
- onClick: () => handleDeselectAll(),
546
- type: 'button',
547
- }),
586
+ !props.disabled &&
587
+ props.cleaner &&
588
+ selected.value.length > 0 &&
589
+ h('button', {
590
+ class: 'form-multi-select-cleaner',
591
+ onClick: () => handleDeselectAll(),
592
+ type: 'button',
593
+ 'aria-label': props.ariaCleanerLabel,
594
+ }),
548
595
  h('button', {
549
596
  class: 'form-multi-select-indicator',
550
597
  onClick: (event) => {
551
598
  event.preventDefault();
552
599
  event.stopPropagation();
553
- visible.value = !visible.value;
600
+ if (!props.disabled) {
601
+ toggleDropdown();
602
+ }
554
603
  },
555
604
  type: 'button',
605
+ ...(props.disabled && { tabIndex: -1 }),
556
606
  }),
557
607
  ],
558
608
  }),
559
609
  ],
560
610
  }),
561
- h('div', {
562
- class: 'form-multi-select-dropdown',
563
- role: 'menu',
564
- ref: dropdownRef,
611
+ h(CConditionalTeleport, {
612
+ container: props.container,
613
+ teleport: props.teleport,
565
614
  }, {
566
- default: () => [
567
- props.multiple &&
568
- props.selectAll &&
569
- h('button', {
570
- class: 'form-multi-select-all',
571
- onClick: () => handleSelectAll(),
572
- type: 'button',
573
- }, props.selectAllLabel),
574
- h(CMultiSelectOptions, {
575
- loading: props.loading,
576
- onOptionClick: (option) => handleOptionClick(option),
577
- options: filteredOptions.value.length === 0 && props.allowCreateOptions
578
- ? userOption.value || []
579
- : filteredOptions.value,
580
- optionsMaxHeight: props.optionsMaxHeight,
581
- optionsStyle: props.optionsStyle,
582
- scopedSlots: slots,
583
- searchNoResultsLabel: props.searchNoResultsLabel,
584
- selected: selected.value,
585
- virtualScroller: props.virtualScroller,
586
- visibleItems: props.visibleItems,
587
- }),
588
- ],
615
+ default: () => h('div', {
616
+ class: [
617
+ 'form-multi-select-dropdown',
618
+ {
619
+ show: props.teleport && isOpen.value,
620
+ },
621
+ ],
622
+ onKeydown: handleGlobalSearch,
623
+ role: 'menu',
624
+ ref: dropdownMenuElement,
625
+ }, {
626
+ default: () => [
627
+ props.multiple &&
628
+ props.selectAll &&
629
+ h('button', {
630
+ class: 'form-multi-select-all',
631
+ onClick: () => handleSelectAll(),
632
+ type: 'button',
633
+ }, props.selectAllLabel),
634
+ h(CMultiSelectOptions, {
635
+ loading: props.loading,
636
+ onOptionClick: (option) => handleOnOptionClick(option),
637
+ options: filteredOptions.value.length === 0 && props.allowCreateOptions
638
+ ? userOption.value || []
639
+ : filteredOptions.value,
640
+ optionsMaxHeight: props.optionsMaxHeight,
641
+ optionsStyle: props.optionsStyle,
642
+ scopedSlots: slots,
643
+ searchNoResultsLabel: props.searchNoResultsLabel,
644
+ selected: selected.value,
645
+ virtualScroller: props.virtualScroller,
646
+ visibleItems: props.visibleItems,
647
+ }),
648
+ ],
649
+ }),
589
650
  }),
590
651
  ],
591
652
  }),