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