@coreui/vue-pro 5.17.1 → 5.19.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 (492) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/autocomplete/CAutocomplete.js +43 -17
  3. package/dist/cjs/components/autocomplete/CAutocomplete.js.map +1 -1
  4. package/dist/cjs/components/autocomplete/CAutocompleteOptions.js +1 -1
  5. package/dist/cjs/components/autocomplete/CAutocompleteOptions.js.map +1 -1
  6. package/dist/cjs/components/autocomplete/utils.d.ts +1 -1
  7. package/dist/cjs/components/autocomplete/utils.js.map +1 -1
  8. package/dist/cjs/components/calendar/CCalendar.d.ts +50 -4
  9. package/dist/cjs/components/calendar/CCalendar.js +146 -40
  10. package/dist/cjs/components/calendar/CCalendar.js.map +1 -1
  11. package/dist/cjs/components/calendar/types.d.ts +2 -2
  12. package/dist/cjs/components/calendar/utils.d.ts +29 -4
  13. package/dist/cjs/components/calendar/utils.js +120 -6
  14. package/dist/cjs/components/calendar/utils.js.map +1 -1
  15. package/dist/cjs/components/carousel/CCarousel.d.ts +24 -2
  16. package/dist/cjs/components/carousel/CCarousel.js +51 -14
  17. package/dist/cjs/components/carousel/CCarousel.js.map +1 -1
  18. package/dist/cjs/components/carousel/CCarouselItem.js +3 -3
  19. package/dist/cjs/components/carousel/CCarouselItem.js.map +1 -1
  20. package/dist/cjs/components/chip/CChip.d.ts +253 -0
  21. package/dist/cjs/components/chip/CChip.js +314 -0
  22. package/dist/cjs/components/chip/CChip.js.map +1 -0
  23. package/dist/cjs/components/chip/const.d.ts +1 -0
  24. package/dist/cjs/components/chip/const.js +8 -0
  25. package/dist/cjs/components/chip/const.js.map +1 -0
  26. package/dist/cjs/components/chip/index.d.ts +6 -0
  27. package/dist/cjs/components/chip/index.js +13 -0
  28. package/dist/cjs/components/chip/index.js.map +1 -0
  29. package/dist/cjs/components/chip-input/CChipInput.d.ts +233 -0
  30. package/dist/cjs/components/chip-input/CChipInput.js +424 -0
  31. package/dist/cjs/components/chip-input/CChipInput.js.map +1 -0
  32. package/dist/cjs/components/chip-input/index.d.ts +6 -0
  33. package/dist/cjs/components/chip-input/index.js +13 -0
  34. package/dist/cjs/components/chip-input/index.js.map +1 -0
  35. package/dist/cjs/components/chip-set/CChipSet.d.ts +145 -0
  36. package/dist/cjs/components/chip-set/CChipSet.js +127 -0
  37. package/dist/cjs/components/chip-set/CChipSet.js.map +1 -0
  38. package/dist/cjs/components/chip-set/buildChips.d.ts +13 -0
  39. package/dist/cjs/components/chip-set/buildChips.js +19 -0
  40. package/dist/cjs/components/chip-set/buildChips.js.map +1 -0
  41. package/dist/cjs/components/chip-set/index.d.ts +2 -0
  42. package/dist/cjs/components/chip-set/useChipSet.d.ts +42 -0
  43. package/dist/cjs/components/chip-set/useChipSet.js +115 -0
  44. package/dist/cjs/components/chip-set/useChipSet.js.map +1 -0
  45. package/dist/cjs/components/collapse/CCollapse.js +2 -2
  46. package/dist/cjs/components/collapse/CCollapse.js.map +1 -1
  47. package/dist/cjs/components/date-picker/CDatePicker.d.ts +51 -5
  48. package/dist/cjs/components/date-picker/CDatePicker.js +54 -3
  49. package/dist/cjs/components/date-picker/CDatePicker.js.map +1 -1
  50. package/dist/cjs/components/date-range-picker/CDateRangePicker.d.ts +52 -6
  51. package/dist/cjs/components/date-range-picker/CDateRangePicker.js +46 -6
  52. package/dist/cjs/components/date-range-picker/CDateRangePicker.js.map +1 -1
  53. package/dist/cjs/components/dropdown/CDropdown.d.ts +24 -1
  54. package/dist/cjs/components/dropdown/CDropdown.js +35 -18
  55. package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
  56. package/dist/cjs/components/dropdown/CDropdownToggle.js +1 -1
  57. package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
  58. package/dist/cjs/components/focus-trap/CFocusTrap.js +4 -1
  59. package/dist/cjs/components/focus-trap/CFocusTrap.js.map +1 -1
  60. package/dist/cjs/components/form/CFormInput.d.ts +3 -0
  61. package/dist/cjs/components/form/CFormRange.d.ts +2 -2
  62. package/dist/cjs/components/form/CFormRange.js +2 -2
  63. package/dist/cjs/components/form/CFormRange.js.map +1 -1
  64. package/dist/cjs/components/grid/CContainer.js +3 -1
  65. package/dist/cjs/components/grid/CContainer.js.map +1 -1
  66. package/dist/cjs/components/index.d.ts +4 -0
  67. package/dist/cjs/components/index.js +140 -126
  68. package/dist/cjs/components/index.js.map +1 -1
  69. package/dist/cjs/components/modal/CModal.js +3 -2
  70. package/dist/cjs/components/modal/CModal.js.map +1 -1
  71. package/dist/cjs/components/modal/CModalHeader.js +6 -3
  72. package/dist/cjs/components/modal/CModalHeader.js.map +1 -1
  73. package/dist/cjs/components/multi-select/CMultiSelect.d.ts +206 -3
  74. package/dist/cjs/components/multi-select/CMultiSelect.js +307 -30
  75. package/dist/cjs/components/multi-select/CMultiSelect.js.map +1 -1
  76. package/dist/cjs/components/multi-select/CMultiSelectNativeSelect.js +1 -2
  77. package/dist/cjs/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
  78. package/dist/cjs/components/multi-select/CMultiSelectOptions.d.ts +16 -1
  79. package/dist/cjs/components/multi-select/CMultiSelectOptions.js +60 -4
  80. package/dist/cjs/components/multi-select/CMultiSelectOptions.js.map +1 -1
  81. package/dist/cjs/components/multi-select/CMultiSelectSelection.d.ts +9 -0
  82. package/dist/cjs/components/multi-select/CMultiSelectSelection.js +6 -1
  83. package/dist/cjs/components/multi-select/CMultiSelectSelection.js.map +1 -1
  84. package/dist/cjs/components/multi-select/utils.js +1 -4
  85. package/dist/cjs/components/multi-select/utils.js.map +1 -1
  86. package/dist/cjs/components/nav/CNav.js +8 -1
  87. package/dist/cjs/components/nav/CNav.js.map +1 -1
  88. package/dist/cjs/components/nav/CNavGroup.d.ts +15 -7
  89. package/dist/cjs/components/nav/CNavGroup.js +113 -88
  90. package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
  91. package/dist/cjs/components/nav/CNavLink.js +11 -0
  92. package/dist/cjs/components/nav/CNavLink.js.map +1 -1
  93. package/dist/cjs/components/popover/CPopover.d.ts +24 -1
  94. package/dist/cjs/components/popover/CPopover.js +18 -1
  95. package/dist/cjs/components/popover/CPopover.js.map +1 -1
  96. package/dist/cjs/components/range-slider/CRangeSlider.d.ts +1 -1
  97. package/dist/cjs/components/search-button/CSearchButton.d.ts +63 -0
  98. package/dist/cjs/components/search-button/CSearchButton.js +125 -0
  99. package/dist/cjs/components/search-button/CSearchButton.js.map +1 -0
  100. package/dist/cjs/components/search-button/index.d.ts +6 -0
  101. package/dist/cjs/components/search-button/index.js +13 -0
  102. package/dist/cjs/components/search-button/index.js.map +1 -0
  103. package/dist/cjs/components/search-button/types.d.ts +10 -0
  104. package/dist/cjs/components/search-button/utils.d.ts +11 -0
  105. package/dist/cjs/components/search-button/utils.js +114 -0
  106. package/dist/cjs/components/search-button/utils.js.map +1 -0
  107. package/dist/cjs/components/sidebar/CSidebar.js +4 -3
  108. package/dist/cjs/components/sidebar/CSidebar.js.map +1 -1
  109. package/dist/cjs/components/sidebar/CSidebarNav.d.ts +32 -0
  110. package/dist/cjs/components/sidebar/CSidebarNav.js +28 -24
  111. package/dist/cjs/components/sidebar/CSidebarNav.js.map +1 -1
  112. package/dist/cjs/components/smart-table/CSmartTable.d.ts +1 -1
  113. package/dist/cjs/components/smart-table/CSmartTableBody.d.ts +1 -1
  114. package/dist/cjs/components/smart-table/CSmartTableHead.d.ts +1 -1
  115. package/dist/cjs/components/spinner/CSpinner.d.ts +4 -4
  116. package/dist/cjs/components/spinner/CSpinner.js +2 -2
  117. package/dist/cjs/components/spinner/CSpinner.js.map +1 -1
  118. package/dist/cjs/components/table/utils.js +4 -4
  119. package/dist/cjs/components/table/utils.js.map +1 -1
  120. package/dist/cjs/components/tabs/CTabList.js +8 -2
  121. package/dist/cjs/components/tabs/CTabList.js.map +1 -1
  122. package/dist/cjs/components/tabs/CTabs.js +1 -1
  123. package/dist/cjs/components/tabs/CTabs.js.map +1 -1
  124. package/dist/cjs/components/toast/CToast.js +12 -2
  125. package/dist/cjs/components/toast/CToast.js.map +1 -1
  126. package/dist/cjs/components/toast/CToastClose.d.ts +3 -2
  127. package/dist/cjs/components/toast/CToastClose.js +2 -3
  128. package/dist/cjs/components/toast/CToastClose.js.map +1 -1
  129. package/dist/cjs/components/tooltip/CTooltip.d.ts +24 -1
  130. package/dist/cjs/components/tooltip/CTooltip.js +18 -1
  131. package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
  132. package/dist/cjs/directives/v-c-popover.js +6 -3
  133. package/dist/cjs/directives/v-c-popover.js.map +1 -1
  134. package/dist/cjs/directives/v-c-tooltip.js +6 -3
  135. package/dist/cjs/directives/v-c-tooltip.js.map +1 -1
  136. package/dist/cjs/directives/v-c-visible.js +1 -1
  137. package/dist/cjs/directives/v-c-visible.js.map +1 -1
  138. package/dist/cjs/index.js +158 -144
  139. package/dist/cjs/index.js.map +1 -1
  140. package/dist/cjs/node_modules/@coreui/icons/dist/esm/free/cil-arrow-bottom.js +1 -1
  141. package/dist/cjs/node_modules/@coreui/icons/dist/esm/free/cil-arrow-bottom.js.map +1 -1
  142. package/dist/cjs/node_modules/@coreui/icons/dist/esm/free/cil-arrow-top.js +1 -1
  143. package/dist/cjs/node_modules/@coreui/icons/dist/esm/free/cil-arrow-top.js.map +1 -1
  144. package/dist/cjs/node_modules/@coreui/icons/dist/esm/free/cil-filter-x.js +1 -1
  145. package/dist/cjs/node_modules/@coreui/icons/dist/esm/free/cil-filter-x.js.map +1 -1
  146. package/dist/cjs/node_modules/@coreui/icons/dist/esm/free/cil-swap-vertical.js +1 -1
  147. package/dist/cjs/node_modules/@coreui/icons/dist/esm/free/cil-swap-vertical.js.map +1 -1
  148. package/dist/cjs/utils/index.d.ts +2 -1
  149. package/dist/cjs/utils/swipe.d.ts +26 -0
  150. package/dist/cjs/utils/swipe.js +94 -0
  151. package/dist/cjs/utils/swipe.js.map +1 -0
  152. package/dist/cjs/utils/transition.js.map +1 -1
  153. package/dist/esm/components/autocomplete/CAutocomplete.js +45 -19
  154. package/dist/esm/components/autocomplete/CAutocomplete.js.map +1 -1
  155. package/dist/esm/components/autocomplete/CAutocompleteOptions.js +2 -2
  156. package/dist/esm/components/autocomplete/utils.d.ts +1 -1
  157. package/dist/esm/components/autocomplete/utils.js.map +1 -1
  158. package/dist/esm/components/calendar/CCalendar.d.ts +50 -4
  159. package/dist/esm/components/calendar/CCalendar.js +147 -41
  160. package/dist/esm/components/calendar/CCalendar.js.map +1 -1
  161. package/dist/esm/components/calendar/types.d.ts +2 -2
  162. package/dist/esm/components/calendar/utils.d.ts +29 -4
  163. package/dist/esm/components/calendar/utils.js +118 -7
  164. package/dist/esm/components/calendar/utils.js.map +1 -1
  165. package/dist/esm/components/carousel/CCarousel.d.ts +24 -2
  166. package/dist/esm/components/carousel/CCarousel.js +52 -15
  167. package/dist/esm/components/carousel/CCarousel.js.map +1 -1
  168. package/dist/esm/components/carousel/CCarouselItem.js +3 -3
  169. package/dist/esm/components/carousel/CCarouselItem.js.map +1 -1
  170. package/dist/esm/components/chip/CChip.d.ts +253 -0
  171. package/dist/esm/components/chip/CChip.js +312 -0
  172. package/dist/esm/components/chip/CChip.js.map +1 -0
  173. package/dist/esm/components/chip/const.d.ts +1 -0
  174. package/dist/esm/components/chip/const.js +6 -0
  175. package/dist/esm/components/chip/const.js.map +1 -0
  176. package/dist/esm/components/chip/index.d.ts +6 -0
  177. package/dist/esm/components/chip/index.js +10 -0
  178. package/dist/esm/components/chip/index.js.map +1 -0
  179. package/dist/esm/components/chip-input/CChipInput.d.ts +233 -0
  180. package/dist/esm/components/chip-input/CChipInput.js +422 -0
  181. package/dist/esm/components/chip-input/CChipInput.js.map +1 -0
  182. package/dist/esm/components/chip-input/index.d.ts +6 -0
  183. package/dist/esm/components/chip-input/index.js +10 -0
  184. package/dist/esm/components/chip-input/index.js.map +1 -0
  185. package/dist/esm/components/chip-set/CChipSet.d.ts +145 -0
  186. package/dist/esm/components/chip-set/CChipSet.js +125 -0
  187. package/dist/esm/components/chip-set/CChipSet.js.map +1 -0
  188. package/dist/esm/components/chip-set/buildChips.d.ts +13 -0
  189. package/dist/esm/components/chip-set/buildChips.js +17 -0
  190. package/dist/esm/components/chip-set/buildChips.js.map +1 -0
  191. package/dist/esm/components/chip-set/index.d.ts +2 -0
  192. package/dist/esm/components/chip-set/useChipSet.d.ts +42 -0
  193. package/dist/esm/components/chip-set/useChipSet.js +112 -0
  194. package/dist/esm/components/chip-set/useChipSet.js.map +1 -0
  195. package/dist/esm/components/collapse/CCollapse.js +2 -2
  196. package/dist/esm/components/collapse/CCollapse.js.map +1 -1
  197. package/dist/esm/components/date-picker/CDatePicker.d.ts +51 -5
  198. package/dist/esm/components/date-picker/CDatePicker.js +54 -3
  199. package/dist/esm/components/date-picker/CDatePicker.js.map +1 -1
  200. package/dist/esm/components/date-range-picker/CDateRangePicker.d.ts +52 -6
  201. package/dist/esm/components/date-range-picker/CDateRangePicker.js +46 -6
  202. package/dist/esm/components/date-range-picker/CDateRangePicker.js.map +1 -1
  203. package/dist/esm/components/dropdown/CDropdown.d.ts +24 -1
  204. package/dist/esm/components/dropdown/CDropdown.js +35 -18
  205. package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
  206. package/dist/esm/components/dropdown/CDropdownToggle.js +2 -2
  207. package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
  208. package/dist/esm/components/focus-trap/CFocusTrap.js +4 -1
  209. package/dist/esm/components/focus-trap/CFocusTrap.js.map +1 -1
  210. package/dist/esm/components/form/CFormInput.d.ts +3 -0
  211. package/dist/esm/components/form/CFormRange.d.ts +2 -2
  212. package/dist/esm/components/form/CFormRange.js +2 -2
  213. package/dist/esm/components/form/CFormRange.js.map +1 -1
  214. package/dist/esm/components/grid/CContainer.js +3 -1
  215. package/dist/esm/components/grid/CContainer.js.map +1 -1
  216. package/dist/esm/components/index.d.ts +4 -0
  217. package/dist/esm/components/index.js +23 -16
  218. package/dist/esm/components/index.js.map +1 -1
  219. package/dist/esm/components/modal/CModal.js +3 -2
  220. package/dist/esm/components/modal/CModal.js.map +1 -1
  221. package/dist/esm/components/modal/CModalHeader.js +6 -3
  222. package/dist/esm/components/modal/CModalHeader.js.map +1 -1
  223. package/dist/esm/components/multi-select/CMultiSelect.d.ts +206 -3
  224. package/dist/esm/components/multi-select/CMultiSelect.js +308 -31
  225. package/dist/esm/components/multi-select/CMultiSelect.js.map +1 -1
  226. package/dist/esm/components/multi-select/CMultiSelectNativeSelect.js +1 -2
  227. package/dist/esm/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
  228. package/dist/esm/components/multi-select/CMultiSelectOptions.d.ts +16 -1
  229. package/dist/esm/components/multi-select/CMultiSelectOptions.js +60 -4
  230. package/dist/esm/components/multi-select/CMultiSelectOptions.js.map +1 -1
  231. package/dist/esm/components/multi-select/CMultiSelectSelection.d.ts +9 -0
  232. package/dist/esm/components/multi-select/CMultiSelectSelection.js +6 -1
  233. package/dist/esm/components/multi-select/CMultiSelectSelection.js.map +1 -1
  234. package/dist/esm/components/multi-select/utils.js +1 -4
  235. package/dist/esm/components/multi-select/utils.js.map +1 -1
  236. package/dist/esm/components/nav/CNav.js +8 -1
  237. package/dist/esm/components/nav/CNav.js.map +1 -1
  238. package/dist/esm/components/nav/CNavGroup.d.ts +15 -7
  239. package/dist/esm/components/nav/CNavGroup.js +114 -89
  240. package/dist/esm/components/nav/CNavGroup.js.map +1 -1
  241. package/dist/esm/components/nav/CNavLink.js +12 -1
  242. package/dist/esm/components/nav/CNavLink.js.map +1 -1
  243. package/dist/esm/components/popover/CPopover.d.ts +24 -1
  244. package/dist/esm/components/popover/CPopover.js +18 -1
  245. package/dist/esm/components/popover/CPopover.js.map +1 -1
  246. package/dist/esm/components/range-slider/CRangeSlider.d.ts +1 -1
  247. package/dist/esm/components/search-button/CSearchButton.d.ts +63 -0
  248. package/dist/esm/components/search-button/CSearchButton.js +123 -0
  249. package/dist/esm/components/search-button/CSearchButton.js.map +1 -0
  250. package/dist/esm/components/search-button/index.d.ts +6 -0
  251. package/dist/esm/components/search-button/index.js +10 -0
  252. package/dist/esm/components/search-button/index.js.map +1 -0
  253. package/dist/esm/components/search-button/types.d.ts +10 -0
  254. package/dist/esm/components/search-button/utils.d.ts +11 -0
  255. package/dist/esm/components/search-button/utils.js +103 -0
  256. package/dist/esm/components/search-button/utils.js.map +1 -0
  257. package/dist/esm/components/sidebar/CSidebar.js +4 -3
  258. package/dist/esm/components/sidebar/CSidebar.js.map +1 -1
  259. package/dist/esm/components/sidebar/CSidebarNav.d.ts +32 -0
  260. package/dist/esm/components/sidebar/CSidebarNav.js +29 -25
  261. package/dist/esm/components/sidebar/CSidebarNav.js.map +1 -1
  262. package/dist/esm/components/smart-table/CSmartTable.d.ts +1 -1
  263. package/dist/esm/components/smart-table/CSmartTableBody.d.ts +1 -1
  264. package/dist/esm/components/smart-table/CSmartTableHead.d.ts +1 -1
  265. package/dist/esm/components/smart-table/CSmartTableHead.js +1 -1
  266. package/dist/esm/components/spinner/CSpinner.d.ts +4 -4
  267. package/dist/esm/components/spinner/CSpinner.js +2 -2
  268. package/dist/esm/components/spinner/CSpinner.js.map +1 -1
  269. package/dist/esm/components/table/utils.js +4 -4
  270. package/dist/esm/components/table/utils.js.map +1 -1
  271. package/dist/esm/components/tabs/CTabList.js +8 -2
  272. package/dist/esm/components/tabs/CTabList.js.map +1 -1
  273. package/dist/esm/components/tabs/CTabs.js +1 -1
  274. package/dist/esm/components/tabs/CTabs.js.map +1 -1
  275. package/dist/esm/components/time-picker/CTimePicker.js +1 -1
  276. package/dist/esm/components/toast/CToast.js +12 -2
  277. package/dist/esm/components/toast/CToast.js.map +1 -1
  278. package/dist/esm/components/toast/CToastClose.d.ts +3 -2
  279. package/dist/esm/components/toast/CToastClose.js +2 -3
  280. package/dist/esm/components/toast/CToastClose.js.map +1 -1
  281. package/dist/esm/components/tooltip/CTooltip.d.ts +24 -1
  282. package/dist/esm/components/tooltip/CTooltip.js +18 -1
  283. package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
  284. package/dist/esm/directives/v-c-popover.js +6 -3
  285. package/dist/esm/directives/v-c-popover.js.map +1 -1
  286. package/dist/esm/directives/v-c-tooltip.js +6 -3
  287. package/dist/esm/directives/v-c-tooltip.js.map +1 -1
  288. package/dist/esm/directives/v-c-visible.js +1 -1
  289. package/dist/esm/directives/v-c-visible.js.map +1 -1
  290. package/dist/esm/index.js +67 -60
  291. package/dist/esm/index.js.map +1 -1
  292. package/dist/esm/node_modules/@coreui/icons/dist/esm/free/cil-arrow-bottom.js +1 -1
  293. package/dist/esm/node_modules/@coreui/icons/dist/esm/free/cil-arrow-bottom.js.map +1 -1
  294. package/dist/esm/node_modules/@coreui/icons/dist/esm/free/cil-arrow-top.js +1 -1
  295. package/dist/esm/node_modules/@coreui/icons/dist/esm/free/cil-arrow-top.js.map +1 -1
  296. package/dist/esm/node_modules/@coreui/icons/dist/esm/free/cil-filter-x.js +1 -1
  297. package/dist/esm/node_modules/@coreui/icons/dist/esm/free/cil-filter-x.js.map +1 -1
  298. package/dist/esm/node_modules/@coreui/icons/dist/esm/free/cil-swap-vertical.js +1 -1
  299. package/dist/esm/node_modules/@coreui/icons/dist/esm/free/cil-swap-vertical.js.map +1 -1
  300. package/dist/esm/utils/index.d.ts +2 -1
  301. package/dist/esm/utils/swipe.d.ts +26 -0
  302. package/dist/esm/utils/swipe.js +90 -0
  303. package/dist/esm/utils/swipe.js.map +1 -0
  304. package/dist/esm/utils/transition.js.map +1 -1
  305. package/package.json +9 -9
  306. package/src/components/accordion/CAccordion.ts +2 -2
  307. package/src/components/accordion/CAccordionBody.ts +1 -1
  308. package/src/components/accordion/CAccordionButton.ts +1 -1
  309. package/src/components/accordion/CAccordionHeader.ts +2 -2
  310. package/src/components/accordion/__tests__/__snapshots__/CAccordionButton.spec.ts.snap +1 -1
  311. package/src/components/accordion/__tests__/__snapshots__/CAccordionHeader.spec.ts.snap +1 -1
  312. package/src/components/alert/CAlert.ts +3 -3
  313. package/src/components/alert/CAlertHeading.ts +1 -1
  314. package/src/components/alert/CAlertLink.ts +1 -1
  315. package/src/components/autocomplete/CAutocomplete.ts +71 -34
  316. package/src/components/autocomplete/__tests__/CAutocomplete.spec.ts +48 -2
  317. package/src/components/autocomplete/__tests__/CAutocompleteOptions.spec.ts +8 -5
  318. package/src/components/autocomplete/utils.ts +2 -2
  319. package/src/components/avatar/CAvatar.ts +1 -1
  320. package/src/components/backdrop/CBackdrop.ts +1 -1
  321. package/src/components/badge/CBadge.ts +1 -1
  322. package/src/components/breadcrumb/CBreadcrumb.ts +1 -1
  323. package/src/components/breadcrumb/CBreadcrumbItem.ts +1 -1
  324. package/src/components/button/CButton.ts +1 -1
  325. package/src/components/button/__tests__/CButton.spec.ts +0 -1
  326. package/src/components/button/__tests__/__snapshots__/CButton.spec.ts.snap +1 -1
  327. package/src/components/button-group/CButtonGroup.ts +1 -1
  328. package/src/components/calendar/CCalendar.ts +170 -37
  329. package/src/components/calendar/types.ts +2 -2
  330. package/src/components/calendar/utils.ts +150 -7
  331. package/src/components/callout/CCallout.ts +1 -1
  332. package/src/components/card/CCard.ts +1 -1
  333. package/src/components/card/CCardImage.ts +1 -1
  334. package/src/components/card/CCardLink.ts +1 -1
  335. package/src/components/carousel/CCarousel.ts +61 -22
  336. package/src/components/carousel/CCarouselCaption.ts +1 -1
  337. package/src/components/carousel/CCarouselItem.ts +5 -4
  338. package/src/components/carousel/__tests__/CCarousel.spec.ts +1 -1
  339. package/src/components/chip/CChip.ts +361 -0
  340. package/src/components/chip/__tests__/CChip.spec.ts +391 -0
  341. package/src/components/chip/__tests__/__snapshots__/CChip.spec.ts.snap +5 -0
  342. package/src/components/chip/const.ts +3 -0
  343. package/src/components/chip/index.ts +10 -0
  344. package/src/components/chip-input/CChipInput.ts +503 -0
  345. package/src/components/chip-input/__tests__/CChipInput.spec.ts +443 -0
  346. package/src/components/chip-input/__tests__/__snapshots__/CChipInput.spec.ts.snap +3 -0
  347. package/src/components/chip-input/index.ts +10 -0
  348. package/src/components/chip-set/CChipSet.ts +140 -0
  349. package/src/components/chip-set/__tests__/CChipSet.spec.ts +174 -0
  350. package/src/components/chip-set/buildChips.ts +29 -0
  351. package/src/components/chip-set/index.ts +3 -0
  352. package/src/components/chip-set/useChipSet.ts +168 -0
  353. package/src/components/collapse/CCollapse.ts +5 -5
  354. package/src/components/collapse/__tests__/CCollapse.spec.ts +48 -0
  355. package/src/components/collapse/__tests__/__snapshots__/CCollapse.spec.ts.snap +7 -0
  356. package/src/components/conditional-teleport/CConditionalTeleport.ts +3 -3
  357. package/src/components/conditional-teleport/__tests__/CConditionalTeleport.spec.ts +28 -0
  358. package/src/components/date-picker/CDatePicker.ts +73 -13
  359. package/src/components/date-range-picker/CDateRangePicker.ts +53 -7
  360. package/src/components/dropdown/CDropdown.ts +44 -24
  361. package/src/components/dropdown/CDropdownHeader.ts +1 -1
  362. package/src/components/dropdown/CDropdownItem.ts +1 -1
  363. package/src/components/dropdown/CDropdownMenu.ts +2 -2
  364. package/src/components/dropdown/CDropdownToggle.ts +4 -4
  365. package/src/components/dropdown/__tests__/CDropdown.spec.ts +1 -1
  366. package/src/components/dropdown/__tests__/CDropdownMenu.spec.ts +11 -7
  367. package/src/components/dropdown/__tests__/CDropdownPopperConfig.spec.ts +63 -0
  368. package/src/components/dropdown/__tests__/CDropdownToggle.spec.ts +0 -2
  369. package/src/components/dropdown/__tests__/__snapshots__/CDropdown.spec.ts.snap +1 -1
  370. package/src/components/dropdown/__tests__/__snapshots__/CDropdownMenu.spec.ts.snap +4 -0
  371. package/src/components/dropdown/utils.ts +2 -2
  372. package/src/components/focus-trap/CFocusTrap.ts +9 -6
  373. package/src/components/focus-trap/__tests__/CFocusTrap.spec.ts +42 -0
  374. package/src/components/footer/CFooter.ts +1 -1
  375. package/src/components/footer/__tests__/__snapshots__/CFooter.spec.ts.snap +2 -0
  376. package/src/components/form/CForm.ts +1 -1
  377. package/src/components/form/CFormCheck.ts +5 -5
  378. package/src/components/form/CFormControlValidation.ts +3 -3
  379. package/src/components/form/CFormFeedback.ts +1 -1
  380. package/src/components/form/CFormFloating.ts +1 -1
  381. package/src/components/form/CFormInput.ts +2 -2
  382. package/src/components/form/CFormLabel.ts +1 -1
  383. package/src/components/form/CFormRange.ts +4 -4
  384. package/src/components/form/CFormSelect.ts +3 -3
  385. package/src/components/form/CFormSwitch.ts +2 -2
  386. package/src/components/form/CFormTextarea.ts +2 -2
  387. package/src/components/form/CInputGroup.ts +1 -1
  388. package/src/components/form/__tests__/CFormRange.spec.ts +2 -2
  389. package/src/components/form/__tests__/CFormText.spec.ts +1 -1
  390. package/src/components/form/__tests__/__snapshots__/CFormRange.spec.ts.snap +1 -1
  391. package/src/components/grid/CCol.ts +1 -1
  392. package/src/components/grid/CContainer.ts +4 -2
  393. package/src/components/grid/CRow.ts +1 -1
  394. package/src/components/header/CHeader.ts +2 -2
  395. package/src/components/header/CHeaderNav.ts +1 -1
  396. package/src/components/header/CHeaderToggler.ts +1 -1
  397. package/src/components/header/__tests__/CHeader.spec.ts +1 -2
  398. package/src/components/header/__tests__/__snapshots__/CHeader.spec.ts.snap +2 -0
  399. package/src/components/index.ts +4 -0
  400. package/src/components/link/CLink.ts +1 -1
  401. package/src/components/list-group/CListGroup.ts +1 -1
  402. package/src/components/list-group/CListGroupItem.ts +1 -1
  403. package/src/components/modal/CModal.ts +3 -2
  404. package/src/components/modal/CModalHeader.ts +10 -3
  405. package/src/components/modal/__tests__/__snapshots__/CModal.spec.ts.snap +9 -4
  406. package/src/components/multi-select/CMultiSelect.ts +385 -43
  407. package/src/components/multi-select/CMultiSelectNativeSelect.ts +1 -2
  408. package/src/components/multi-select/CMultiSelectOptions.ts +77 -3
  409. package/src/components/multi-select/CMultiSelectSelection.ts +6 -1
  410. package/src/components/multi-select/utils.ts +6 -6
  411. package/src/components/nav/CNav.ts +9 -2
  412. package/src/components/nav/CNavGroup.ts +147 -99
  413. package/src/components/nav/CNavItem.ts +2 -2
  414. package/src/components/nav/CNavLink.ts +19 -2
  415. package/src/components/nav/__tests__/CNavGroup.spec.ts +188 -6
  416. package/src/components/nav/__tests__/CNavItem.spec.ts +6 -6
  417. package/src/components/nav/__tests__/__snapshots__/CNavGroup.spec.ts.snap +3 -7
  418. package/src/components/nav/__tests__/__snapshots__/CNavItem.spec.ts.snap +1 -5
  419. package/src/components/navbar/CNavbar.ts +2 -2
  420. package/src/components/navbar/CNavbarBrand.ts +1 -1
  421. package/src/components/navbar/CNavbarNav.ts +1 -1
  422. package/src/components/navbar/CNavbarToggler.ts +1 -1
  423. package/src/components/navbar/__tests__/CNavbar.spec.ts +1 -1
  424. package/src/components/pagination/CPagination.ts +2 -2
  425. package/src/components/pagination/CPaginationItem.ts +2 -2
  426. package/src/components/placeholder/CPlaceholder.ts +1 -1
  427. package/src/components/popover/CPopover.ts +27 -7
  428. package/src/components/popover/__tests__/CPopover.spec.ts +43 -0
  429. package/src/components/progress/CProgress.ts +2 -2
  430. package/src/components/progress/CProgressBar.ts +1 -1
  431. package/src/components/progress/CProgressStacked.ts +1 -1
  432. package/src/components/progress/__tests__/CProgressBar.spec.ts +0 -4
  433. package/src/components/search-button/CSearchButton.ts +163 -0
  434. package/src/components/search-button/__tests__/CSearchButton.spec.ts +128 -0
  435. package/src/components/search-button/__tests__/__snapshots__/CSearchButton.spec.ts.snap +13 -0
  436. package/src/components/search-button/index.ts +10 -0
  437. package/src/components/search-button/types.ts +10 -0
  438. package/src/components/search-button/utils.ts +140 -0
  439. package/src/components/sidebar/CSidebar.ts +9 -6
  440. package/src/components/sidebar/CSidebarBrand.ts +1 -1
  441. package/src/components/sidebar/CSidebarNav.ts +30 -28
  442. package/src/components/sidebar/__tests__/CSidebar.spec.ts +1 -1
  443. package/src/components/spinner/CSpinner.ts +6 -6
  444. package/src/components/spinner/__tests__/CSpinner.spec.ts +0 -1
  445. package/src/components/stepper/__tests__/CStepper.spec.ts +13 -8
  446. package/src/components/table/CTable.ts +16 -16
  447. package/src/components/table/CTableBody.ts +1 -1
  448. package/src/components/table/CTableDataCell.ts +1 -1
  449. package/src/components/table/CTableFoot.ts +1 -1
  450. package/src/components/table/CTableHead.ts +1 -1
  451. package/src/components/table/CTableHeaderCell.ts +1 -1
  452. package/src/components/table/CTableRow.ts +1 -1
  453. package/src/components/table/types.ts +1 -0
  454. package/src/components/table/utils.ts +4 -4
  455. package/src/components/tabs/CTab.ts +1 -1
  456. package/src/components/tabs/CTabList.ts +12 -5
  457. package/src/components/tabs/CTabPane.ts +3 -3
  458. package/src/components/tabs/CTabPanel.ts +5 -5
  459. package/src/components/tabs/CTabs.ts +2 -2
  460. package/src/components/tabs/__tests__/__snapshots__/CTabPane.spec.ts.snap +1 -1
  461. package/src/components/toast/CToast.ts +12 -4
  462. package/src/components/toast/CToastClose.ts +5 -6
  463. package/src/components/toast/CToaster.ts +1 -1
  464. package/src/components/toast/__tests__/CToaster.spec.ts +0 -2
  465. package/src/components/toast/__tests__/__snapshots__/CToastClose.spec.ts.snap +1 -1
  466. package/src/components/tooltip/CTooltip.ts +26 -6
  467. package/src/components/tooltip/__tests__/CTooltip.spec.ts +43 -0
  468. package/src/components/widgets/CWidgetStatsA.ts +4 -4
  469. package/src/components/widgets/CWidgetStatsB.ts +5 -5
  470. package/src/components/widgets/CWidgetStatsC.ts +5 -5
  471. package/src/components/widgets/CWidgetStatsD.ts +5 -5
  472. package/src/components/widgets/CWidgetStatsE.ts +4 -4
  473. package/src/components/widgets/CWidgetStatsF.ts +5 -5
  474. package/src/directives/__tests__/v-c-placeholder.spec.ts +33 -0
  475. package/src/directives/__tests__/v-c-popover.spec.ts +67 -0
  476. package/src/directives/__tests__/v-c-tooltip.spec.ts +66 -0
  477. package/src/directives/v-c-popover.ts +8 -5
  478. package/src/directives/v-c-tooltip.ts +8 -5
  479. package/src/directives/v-c-visible.ts +1 -1
  480. package/src/index.ts +1 -1
  481. package/src/utils/ComponentProps.ts +1 -0
  482. package/src/utils/__tests__/swipe.spec.ts +82 -0
  483. package/src/utils/getNextActiveElement.ts +1 -1
  484. package/src/utils/index.ts +2 -0
  485. package/src/utils/swipe.ts +114 -0
  486. package/src/utils/transition.ts +2 -2
  487. package/dist/cjs/components/collapse/__test__/CCollapse.spec.d.ts +0 -1
  488. package/dist/esm/components/collapse/__test__/CCollapse.spec.d.ts +0 -1
  489. package/src/components/accordion/__tests__/CAccordionCollapse.spec.ts +0 -28
  490. package/src/components/accordion/__tests__/__snapshots__/CAccordionCollapse.spec.ts.snap +0 -7
  491. package/src/components/collapse/__test__/CCollapse.spec.ts +0 -44
  492. package/src/components/collapse/__test__/__snapshots__/CCollapse.spec.ts.snap +0 -13
@@ -187,6 +187,19 @@ const CDateRangePicker = defineComponent({
187
187
  return false
188
188
  },
189
189
  },
190
+ /**
191
+ * Sets the format for month names.
192
+ *
193
+ * @default 'short'
194
+ * @since 5.18.0
195
+ */
196
+ monthFormat: {
197
+ type: String as PropType<'long' | 'narrow' | 'short' | 'numeric' | '2-digit'>,
198
+ default: 'short',
199
+ validator: (value: string) => {
200
+ return ['long', 'narrow', 'short', 'numeric', '2-digit'].includes(value)
201
+ },
202
+ },
190
203
  /**
191
204
  * Toggle the disabled state for the component.
192
205
  */
@@ -383,14 +396,14 @@ const CDateRangePicker = defineComponent({
383
396
  */
384
397
  selectAdjacementDays: Boolean,
385
398
  /**
386
- * Specify the type of date selection as day, week, month, or year.
399
+ * Specify the type of date selection as day, week, month, quarter, or year.
387
400
  *
388
401
  * @since 5.0.0
389
402
  */
390
403
  selectionType: {
391
- type: String as PropType<'day' | 'week' | 'month' | 'year'>,
404
+ type: String as PropType<'day' | 'week' | 'month' | 'quarter' | 'year'>,
392
405
  default: 'day',
393
- validator: (value: string) => ['day', 'week', 'month', 'year'].includes(value),
406
+ validator: (value: string) => ['day', 'week', 'month', 'quarter', 'year'].includes(value),
394
407
  },
395
408
  /**
396
409
  * Set whether to display dates in adjacent months (non-selectable) at the start and end of the current month.
@@ -534,6 +547,19 @@ const CDateRangePicker = defineComponent({
534
547
  * @since 5.0.0
535
548
  */
536
549
  weekNumbersLabel: String,
550
+ /**
551
+ * Sets the format for years.
552
+ *
553
+ * @default 'numeric'
554
+ * @since 5.18.0
555
+ */
556
+ yearFormat: {
557
+ type: String as PropType<'numeric' | '2-digit'>,
558
+ default: 'numeric',
559
+ validator: (value: string) => {
560
+ return ['numeric', '2-digit'].includes(value)
561
+ },
562
+ },
537
563
  },
538
564
  emits: [
539
565
  /**
@@ -1074,6 +1100,7 @@ const CDateRangePicker = defineComponent({
1074
1100
  locale: props.locale,
1075
1101
  maxDate: maxDate.value,
1076
1102
  minDate: minDate.value,
1103
+ monthFormat: props.monthFormat,
1077
1104
  navigation: props.navigation,
1078
1105
  navYearFirst: props.navYearFirst,
1079
1106
  range: props.range,
@@ -1085,6 +1112,7 @@ const CDateRangePicker = defineComponent({
1085
1112
  startDate: startDate.value,
1086
1113
  weekdayFormat: props.weekdayFormat,
1087
1114
  weekNumbersLabel: props.weekNumbersLabel,
1115
+ yearFormat: props.yearFormat,
1088
1116
  onDateHover: (date: Date | null) => handleDateHover(date),
1089
1117
  onCalendarDateChange: (date: Date) => {
1090
1118
  calendarDate.value = date
@@ -1100,27 +1128,45 @@ const CDateRangePicker = defineComponent({
1100
1128
  * @slot Location for next icon.
1101
1129
  */
1102
1130
  ...(slots.navNextIcon && {
1103
- navNextIcon: () => slots.navNextIcon && slots.navNextIcon(),
1131
+ navNextIcon: () =>
1132
+ slots.navNextIcon?.(),
1104
1133
  }),
1105
1134
  /**
1106
1135
  * @slot Location for next double icon.
1107
1136
  */
1108
1137
  ...(slots.navNextDoubleIcon && {
1109
1138
  navNextDoubleIcon: () =>
1110
- slots.navNextDoubleIcon && slots.navNextDoubleIcon(),
1139
+ slots.navNextDoubleIcon?.(),
1111
1140
  }),
1112
1141
  /**
1113
1142
  * @slot Location for previous icon.
1114
1143
  */
1115
1144
  ...(slots.navPrevIcon && {
1116
- navPrevIcon: () => slots.navPrevIcon && slots.navPrevIcon(),
1145
+ navPrevIcon: () =>
1146
+ slots.navPrevIcon?.(),
1117
1147
  }),
1118
1148
  /**
1119
1149
  * @slot Location for double previous icon.
1120
1150
  */
1121
1151
  ...(slots.navPrevDoubleIcon && {
1122
1152
  navPrevDoubleIcon: () =>
1123
- slots.navPrevDoubleIcon && slots.navPrevDoubleIcon(),
1153
+ slots.navPrevDoubleIcon?.(),
1154
+ }),
1155
+ ...(slots.dayCell && {
1156
+ dayCell: (slotProps: Record<string, unknown>) =>
1157
+ slots.dayCell?.(slotProps),
1158
+ }),
1159
+ ...(slots.monthCell && {
1160
+ monthCell: (slotProps: Record<string, unknown>) =>
1161
+ slots.monthCell?.(slotProps),
1162
+ }),
1163
+ ...(slots.quarterCell && {
1164
+ quarterCell: (slotProps: Record<string, unknown>) =>
1165
+ slots.quarterCell?.(slotProps),
1166
+ }),
1167
+ ...(slots.yearCell && {
1168
+ yearCell: (slotProps: Record<string, unknown>) =>
1169
+ slots.yearCell?.(slotProps),
1124
1170
  }),
1125
1171
  }
1126
1172
  )
@@ -10,7 +10,7 @@ import {
10
10
  Ref,
11
11
  watch,
12
12
  } from 'vue'
13
- import type { Placement } from '@popperjs/core'
13
+ import type { Options, Placement } from '@popperjs/core'
14
14
 
15
15
  import { usePopper } from '../../composables'
16
16
  import type { Triggers } from '../../types'
@@ -124,6 +124,19 @@ const CDropdown = defineComponent({
124
124
  type: Boolean,
125
125
  default: true,
126
126
  },
127
+ /**
128
+ * A Popper.js configuration object, or a function that receives the default
129
+ * configuration and returns a modified one, used to customize the
130
+ * positioning of the dropdown menu.
131
+ *
132
+ * @since 5.10.0
133
+ */
134
+ popperConfig: {
135
+ type: [Object, Function] as PropType<
136
+ Partial<Options> | ((defaultPopperConfig: Partial<Options>) => Partial<Options>)
137
+ >,
138
+ default: undefined,
139
+ },
127
140
  /**
128
141
  * Sets the reference element for positioning the Vue Dropdown Menu.
129
142
  * - `toggle` - The Vue Dropdown Toggle button (default).
@@ -162,7 +175,7 @@ const CDropdown = defineComponent({
162
175
  */
163
176
  variant: {
164
177
  type: String,
165
- default: 'btn-group',
178
+ default: 'dropdown',
166
179
  validator: (value: string) => {
167
180
  return ['btn-group', 'dropdown', 'input-group', 'nav-item'].includes(value)
168
181
  },
@@ -192,22 +205,31 @@ const CDropdown = defineComponent({
192
205
 
193
206
  const { initPopper, destroyPopper } = usePopper()
194
207
 
195
- const popperConfig = computed(() => ({
196
- modifiers: [
197
- {
198
- name: 'offset',
199
- options: {
200
- offset: props.offset,
208
+ const popperConfig = computed(() => {
209
+ const defaultPopperConfig = {
210
+ modifiers: [
211
+ {
212
+ name: 'offset',
213
+ options: {
214
+ offset: props.offset,
215
+ },
201
216
  },
202
- },
203
- ],
204
- placement: getPlacement(
205
- props.placement,
206
- props.direction,
207
- props.alignment,
208
- isRTL(dropdownMenuRef.value)
209
- ) as Placement,
210
- }))
217
+ ],
218
+ placement: getPlacement(
219
+ props.placement,
220
+ props.direction,
221
+ props.alignment,
222
+ isRTL(dropdownMenuRef.value)
223
+ ) as Placement,
224
+ }
225
+
226
+ return {
227
+ ...defaultPopperConfig,
228
+ ...(typeof props.popperConfig === 'function'
229
+ ? props.popperConfig(defaultPopperConfig)
230
+ : props.popperConfig),
231
+ }
232
+ })
211
233
 
212
234
  watch(
213
235
  () => props.visible,
@@ -249,16 +271,14 @@ const CDropdown = defineComponent({
249
271
 
250
272
  window.removeEventListener('click', handleClick)
251
273
  window.removeEventListener('keyup', handleKeyup)
252
- dropdownMenuRef.value && dropdownMenuRef.value.removeEventListener('keydown', handleKeydown)
253
- dropdownToggleRef.value &&
254
- dropdownToggleRef.value.removeEventListener('keydown', handleKeydown)
274
+ dropdownMenuRef.value?.removeEventListener('keydown', handleKeydown)
275
+ dropdownToggleRef.value?.removeEventListener('keydown', handleKeydown)
255
276
  emit('hide')
256
277
  })
257
278
 
258
279
  onUnmounted(() => {
259
- dropdownToggleRef.value &&
260
- dropdownToggleRef.value.removeEventListener('keydown', handleKeydown)
261
- dropdownMenuRef.value && dropdownMenuRef.value.removeEventListener('keydown', handleKeydown)
280
+ dropdownToggleRef.value?.removeEventListener('keydown', handleKeydown)
281
+ dropdownMenuRef.value?.removeEventListener('keydown', handleKeydown)
262
282
  })
263
283
 
264
284
  provide('config', {
@@ -315,7 +335,7 @@ const CDropdown = defineComponent({
315
335
  }
316
336
 
317
337
  const target = event.target as HTMLElement | null
318
- const FORM_TAG_RE = /^(input|select|option|textarea|form|button|label)$/i
338
+ const FORM_TAG_RE = /^(input|select|option|textarea|form)$/i
319
339
 
320
340
  if (isOnMenu && target && FORM_TAG_RE.test(target.tagName)) {
321
341
  return
@@ -18,7 +18,7 @@ const CDropdownHeader = defineComponent({
18
18
  {
19
19
  class: 'dropdown-header',
20
20
  },
21
- slots.default && slots.default(),
21
+ slots.default && slots.default()
22
22
  )
23
23
  },
24
24
  })
@@ -38,7 +38,7 @@ const CDropdownItem = defineComponent({
38
38
  },
39
39
  {
40
40
  default: () => slots.default && slots.default(),
41
- },
41
+ }
42
42
  )
43
43
  },
44
44
  })
@@ -51,9 +51,9 @@ const CDropdownMenu = defineComponent({
51
51
  },
52
52
  props.as === 'ul'
53
53
  ? slots.default && slots.default().map((vnode) => h('li', {}, vnode))
54
- : slots.default && slots.default(),
54
+ : slots.default && slots.default()
55
55
  ),
56
- },
56
+ }
57
57
  )
58
58
  },
59
59
  })
@@ -142,7 +142,7 @@ const CDropdownToggle = defineComponent({
142
142
  event.preventDefault()
143
143
  setVisible(true, event)
144
144
  }
145
- }
145
+ },
146
146
  }
147
147
 
148
148
  const togglerProps = computed(() => {
@@ -174,7 +174,7 @@ const CDropdownToggle = defineComponent({
174
174
  togglerRef.value = el
175
175
  },
176
176
  ...triggers,
177
- }),
177
+ })
178
178
  )
179
179
  : dropdownVariant === 'nav-item' && props.navLink
180
180
  ? h(
@@ -185,7 +185,7 @@ const CDropdownToggle = defineComponent({
185
185
  role: 'button',
186
186
  ref: dropdownToggleRef,
187
187
  },
188
- { default: () => slots.default && slots.default() },
188
+ { default: () => slots.default && slots.default() }
189
189
  )
190
190
  : h(
191
191
  CButton,
@@ -204,7 +204,7 @@ const CDropdownToggle = defineComponent({
204
204
  () =>
205
205
  props.split
206
206
  ? h('span', { class: 'visually-hidden' }, props.splitLabel)
207
- : slots.default && slots.default(),
207
+ : slots.default && slots.default()
208
208
  )
209
209
  },
210
210
  })
@@ -45,7 +45,7 @@ describe(`Loads and display ${ComponentName} component`, () => {
45
45
  })
46
46
  it('contain slots and classes', () => {
47
47
  expect(defaultWrapper.text()).toContain('Default slot')
48
- expect(defaultWrapper.classes('btn-group')).toBe(true)
48
+ expect(defaultWrapper.classes('dropdown')).toBe(true)
49
49
  })
50
50
  })
51
51
 
@@ -8,12 +8,14 @@ const config = {
8
8
  alignment: { lg: 'end' },
9
9
  dark: false,
10
10
  popper: true,
11
+ teleport: false,
11
12
  }
12
13
 
13
14
  const customConfig = {
14
15
  alignment: { lg: 'end' },
15
16
  dark: true,
16
17
  popper: false,
18
+ teleport: false,
17
19
  }
18
20
 
19
21
  const defaultWrapper = mount(Component, {
@@ -55,9 +57,10 @@ describe(`Loads and display ${ComponentName} component`, () => {
55
57
  })
56
58
  it('contain slots and classes', () => {
57
59
  expect(defaultWrapper.text()).toContain('Default slot')
58
- expect(defaultWrapper.classes('dropdown-menu')).toBe(true)
59
- expect(defaultWrapper.classes('dropdown-menu-dark')).toBe(false)
60
- expect(defaultWrapper.classes('show')).toBe(false)
60
+ const menu = defaultWrapper.find('.dropdown-menu')
61
+ expect(menu.classes('dropdown-menu')).toBe(true)
62
+ expect(menu.attributes('data-coreui-theme')).toBeUndefined()
63
+ expect(menu.classes('show')).toBe(false)
61
64
  })
62
65
  })
63
66
 
@@ -68,9 +71,10 @@ describe(`Customize ${ComponentName} component`, () => {
68
71
  it('contain slots and classes', () => {
69
72
  expect(customWrapper.text()).toContain('Default slot')
70
73
  expect(customWrapper.find('li').text()).toContain('Default slot')
71
- expect(customWrapper.classes('dropdown-menu')).toBe(true)
72
- expect(customWrapper.classes('dropdown-menu-dark')).toBe(true)
73
- expect(customWrapper.classes('show')).toBe(true)
74
- expect(customWrapper.attributes('data-coreui-popper')).toBe('static')
74
+ const menu = customWrapper.find('.dropdown-menu')
75
+ expect(menu.classes('dropdown-menu')).toBe(true)
76
+ expect(menu.attributes('data-coreui-theme')).toBe('dark')
77
+ expect(menu.classes('show')).toBe(true)
78
+ expect(menu.attributes('data-coreui-popper')).toBe('static')
75
79
  })
76
80
  })
@@ -0,0 +1,63 @@
1
+ import { mount } from '@vue/test-utils'
2
+ import { h, nextTick } from 'vue'
3
+ import { createPopper } from '@popperjs/core'
4
+ import type { Options } from '@popperjs/core'
5
+ import { CDropdown, CDropdownMenu, CDropdownToggle } from '../../../index'
6
+
7
+ type PopperConfig = Partial<Options> | ((defaultPopperConfig: Partial<Options>) => Partial<Options>)
8
+
9
+ jest.mock('@popperjs/core', () => ({
10
+ createPopper: jest.fn(() => ({
11
+ destroy: jest.fn(),
12
+ setOptions: jest.fn(),
13
+ update: jest.fn(),
14
+ })),
15
+ }))
16
+
17
+ const mockedCreatePopper = createPopper as jest.Mock
18
+
19
+ const mountOpenDropdown = async (popperConfig: PopperConfig) => {
20
+ const wrapper = mount(CDropdown, {
21
+ props: { popperConfig },
22
+ slots: {
23
+ default: () => [h(CDropdownToggle, () => 'Toggle'), h(CDropdownMenu, () => 'Menu')],
24
+ },
25
+ })
26
+
27
+ await nextTick()
28
+ await wrapper.setProps({ visible: true })
29
+ await nextTick()
30
+
31
+ return wrapper
32
+ }
33
+
34
+ describe('CDropdown popperConfig', () => {
35
+ beforeEach(() => mockedCreatePopper.mockClear())
36
+
37
+ it('merges an object popperConfig over the default config', async () => {
38
+ await mountOpenDropdown({ strategy: 'fixed' })
39
+
40
+ expect(mockedCreatePopper).toHaveBeenCalled()
41
+ const options = mockedCreatePopper.mock.calls[0][2]
42
+ expect(options.strategy).toBe('fixed')
43
+ expect(options.placement).toBeDefined()
44
+ expect(options.modifiers).toBeDefined()
45
+ })
46
+
47
+ it('passes the default config to a function popperConfig and uses its result', async () => {
48
+ const popperConfig = jest.fn((defaultConfig: Partial<Options>) => ({
49
+ ...defaultConfig,
50
+ strategy: 'fixed' as const,
51
+ }))
52
+
53
+ await mountOpenDropdown(popperConfig)
54
+
55
+ expect(popperConfig).toHaveBeenCalledTimes(1)
56
+ const defaultArg = popperConfig.mock.calls[0][0]
57
+ expect(defaultArg.modifiers).toBeDefined()
58
+ expect(defaultArg.placement).toBeDefined()
59
+
60
+ const options = mockedCreatePopper.mock.calls[0][2]
61
+ expect(options.strategy).toBe('fixed')
62
+ })
63
+ })
@@ -93,9 +93,7 @@ describe(`Customize ${ComponentName} component`, () => {
93
93
  expect(customWrapper.classes('nav-link')).toBe(true)
94
94
  expect(customWrapper.classes('dropdown-toggle-split')).toBe(true)
95
95
  expect(customWrapper.classes('show')).toBe(true)
96
- expect(customWrapper.classes('active')).toBe(true)
97
96
  expect(customWrapper.classes('disabled')).toBe(true)
98
- expect(customWrapper.attributes('disabled')).toBe('true')
99
97
  expect(customWrapper.attributes('href')).toBe('#')
100
98
  })
101
99
  })
@@ -4,4 +4,4 @@ exports[`Customize (variant number two) CDropdown component renders correctly 1`
4
4
 
5
5
  exports[`Customize CDropdown component renders correctly 1`] = `"<div class="nav-item dropdown dropend">Default slot</div>"`;
6
6
 
7
- exports[`Loads and display CDropdown component renders correctly 1`] = `"<div class="btn-group">Default slot</div>"`;
7
+ exports[`Loads and display CDropdown component renders correctly 1`] = `"<div class="dropdown">Default slot</div>"`;
@@ -2,10 +2,14 @@
2
2
 
3
3
  exports[`Customize CDropdownMenu component renders correctly 1`] = `
4
4
  "<!--teleport start-->
5
+ <ul class="dropdown-menu show dropdown-menu-lg-end" data-coreui-popper="static" data-coreui-theme="dark">
6
+ <li>Default slot</li>
7
+ </ul>
5
8
  <!--teleport end-->"
6
9
  `;
7
10
 
8
11
  exports[`Loads and display CDropdownMenu component renders correctly 1`] = `
9
12
  "<!--teleport start-->
13
+ <div class="dropdown-menu dropdown-menu-lg-end" data-coreui-popper="static">Default slot</div>
10
14
  <!--teleport end-->"
11
15
  `;
@@ -8,7 +8,7 @@ export const getAlignmentClassNames = (alignment: Alignments) => {
8
8
  if (typeof alignment === 'object') {
9
9
  for (const key in alignment) {
10
10
  classNames.push(
11
- `dropdown-menu${key === 'xs' ? '' : `-${key}`}-${alignment[key as keyof Breakpoints]}`,
11
+ `dropdown-menu${key === 'xs' ? '' : `-${key}`}-${alignment[key as keyof Breakpoints]}`
12
12
  )
13
13
  }
14
14
  }
@@ -24,7 +24,7 @@ export const getPlacement = (
24
24
  placement: Placement,
25
25
  direction: string | undefined,
26
26
  alignment: Alignments | string | undefined,
27
- isRTL: boolean,
27
+ isRTL: boolean
28
28
  ): Placements => {
29
29
  let _placement = placement
30
30
 
@@ -282,17 +282,20 @@ const CFocusTrap = defineComponent({
282
282
  const vnodes = slots.default?.()
283
283
  const vnode = vnodes?.[0]
284
284
  if (!vnode) return null
285
-
286
- const originalRef = (vnode.props as any)?.ref
287
-
285
+
286
+ const originalRef = (vnode.props as Record<string, unknown> | null)?.ref
287
+
288
288
  return cloneVNode(vnode, {
289
289
  ref: (el) => {
290
- containerRef.value = el as HTMLElement | null
291
-
290
+ // `el` may be a component public instance (e.g. when the trapped node is wrapped in a
291
+ // `<Transition>`); resolve it to the underlying DOM element so focus handling works.
292
+ const element = ((el as { $el?: HTMLElement } | null)?.$el ?? el) as HTMLElement | null
293
+ containerRef.value = element
294
+
292
295
  if (typeof originalRef === 'function') {
293
296
  originalRef(el)
294
297
  } else if (originalRef && typeof originalRef === 'object' && 'value' in originalRef) {
295
- ;(originalRef as { value: any }).value = el
298
+ ;(originalRef as { value: unknown }).value = el
296
299
  }
297
300
  },
298
301
  })
@@ -0,0 +1,42 @@
1
+ import { mount } from '@vue/test-utils'
2
+ import { h } from 'vue'
3
+ import { CFocusTrap as Component } from '../../../index'
4
+
5
+ const ComponentName = 'CFocusTrap'
6
+
7
+ describe(`Loads and display ${ComponentName} component`, () => {
8
+ it('has a name', () => {
9
+ expect(Component.name).toMatch(ComponentName)
10
+ })
11
+
12
+ it('renders the child element from the default slot', () => {
13
+ const wrapper = mount(Component, {
14
+ slots: { default: () => h('div', { class: 'trapped' }, 'Trapped') },
15
+ })
16
+ expect(wrapper.find('.trapped').exists()).toBe(true)
17
+ expect(wrapper.text()).toContain('Trapped')
18
+ })
19
+
20
+ it('renders nothing when no slot content is provided', () => {
21
+ const wrapper = mount(Component)
22
+ expect(wrapper.html()).toBe('')
23
+ })
24
+
25
+ it('emits activate when mounted active', () => {
26
+ const wrapper = mount(Component, {
27
+ props: { active: true },
28
+ slots: { default: () => h('button', 'Focusable') },
29
+ attachTo: document.body,
30
+ })
31
+ expect(wrapper.emitted('activate')).toBeTruthy()
32
+ })
33
+
34
+ it('does not emit activate when inactive', () => {
35
+ const wrapper = mount(Component, {
36
+ props: { active: false },
37
+ slots: { default: () => h('button', 'Focusable') },
38
+ attachTo: document.body,
39
+ })
40
+ expect(wrapper.emitted('activate')).toBeFalsy()
41
+ })
42
+ })
@@ -27,7 +27,7 @@ const CFooter = defineComponent({
27
27
  h(
28
28
  props.as,
29
29
  { class: ['footer', { [`footer-${props.position}`]: props.position }] },
30
- slots.default && slots.default(),
30
+ slots.default && slots.default()
31
31
  )
32
32
  },
33
33
  })
@@ -1,5 +1,7 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
+ exports[`Customize (number two) CFooter component renders correctly 1`] = `"<footer class="footer">Default slot</footer>"`;
4
+
3
5
  exports[`Customize CFooter component renders correctly 1`] = `"<div class="footer footer-fixed">Default slot</div>"`;
4
6
 
5
7
  exports[`Loads and display CFooter component renders correctly 1`] = `"<div class="footer">Default slot</div>"`;
@@ -13,7 +13,7 @@ const CForm = defineComponent({
13
13
  h(
14
14
  'form',
15
15
  { class: [{ ['was-validated']: props.validated }] },
16
- slots.default && slots.default(),
16
+ slots.default && slots.default()
17
17
  )
18
18
  },
19
19
  })
@@ -135,7 +135,7 @@ const CFormCheck = defineComponent({
135
135
  if (props.modelValue.includes(props.value)) {
136
136
  emit(
137
137
  'update:modelValue',
138
- props.modelValue.filter((value) => value !== props.value),
138
+ props.modelValue.filter((value) => value !== props.value)
139
139
  )
140
140
  } else {
141
141
  emit('update:modelValue', [...props.modelValue, props.value])
@@ -210,14 +210,14 @@ const CFormCheck = defineComponent({
210
210
  },
211
211
  {
212
212
  default: () => (slots.label && slots.label()) || props.label,
213
- },
213
+ }
214
214
  )
215
215
  : h(
216
216
  CFormLabel,
217
217
  { class: 'form-check-label', ...(props.id && { for: props.id }) },
218
218
  {
219
219
  default: () => (slots.label && slots.label()) || props.label,
220
- },
220
+ }
221
221
  )
222
222
 
223
223
  const formValidation = () => {
@@ -244,7 +244,7 @@ const CFormCheck = defineComponent({
244
244
  customClassName: className,
245
245
  ...(props.id && { for: props.id }),
246
246
  },
247
- [formControl(), props.label],
247
+ [formControl(), props.label]
248
248
  ),
249
249
  formValidation(),
250
250
  ]
@@ -253,7 +253,7 @@ const CFormCheck = defineComponent({
253
253
  {
254
254
  class: className,
255
255
  },
256
- [formControl(), props.label && formLabel(), formValidation()],
256
+ [formControl(), props.label && formLabel(), formValidation()]
257
257
  )
258
258
  : formControl()
259
259
  },
@@ -56,7 +56,7 @@ const CFormControlValidation = defineComponent({
56
56
  },
57
57
  {
58
58
  default: () => (slots.feedback && slots.feedback()) || props.feedback,
59
- },
59
+ }
60
60
  ),
61
61
  (props.feedbackInvalid || slots.feedbackInvalid) &&
62
62
  h(
@@ -69,7 +69,7 @@ const CFormControlValidation = defineComponent({
69
69
  {
70
70
  default: () =>
71
71
  (slots.feedbackInvalid && slots.feedbackInvalid()) || props.feedbackInvalid,
72
- },
72
+ }
73
73
  ),
74
74
  (props.feedbackValid || slots.feedbackValid) &&
75
75
  h(
@@ -80,7 +80,7 @@ const CFormControlValidation = defineComponent({
80
80
  },
81
81
  {
82
82
  default: () => (slots.feedbackValid && slots.feedbackValid()) || props.feedbackValid,
83
- },
83
+ }
84
84
  ),
85
85
  ]
86
86
  },
@@ -35,7 +35,7 @@ const CFormFeedback = defineComponent({
35
35
  },
36
36
  ],
37
37
  },
38
- slots.default && slots.default(),
38
+ slots.default && slots.default()
39
39
  )
40
40
  },
41
41
  })