@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
@@ -24,7 +24,7 @@ const CCallout = defineComponent({
24
24
  },
25
25
  ],
26
26
  },
27
- slots.default && slots.default(),
27
+ slots.default && slots.default()
28
28
  )
29
29
  },
30
30
  })
@@ -39,7 +39,7 @@ const CCard = defineComponent({
39
39
  },
40
40
  ],
41
41
  },
42
- slots.default && slots.default(),
42
+ slots.default && slots.default()
43
43
  )
44
44
  },
45
45
  })
@@ -29,7 +29,7 @@ const CCardImage = defineComponent({
29
29
  {
30
30
  class: `card-img${props.orientation ? `-${props.orientation}` : ''}`,
31
31
  },
32
- slots.default && slots.default(),
32
+ slots.default && slots.default()
33
33
  )
34
34
  },
35
35
  })
@@ -17,7 +17,7 @@ const CCardLink = defineComponent({
17
17
  h(
18
18
  CLink,
19
19
  { class: 'card-link', href: props.href },
20
- { default: () => slots.default && slots.default() },
20
+ { default: () => slots.default && slots.default() }
21
21
  )
22
22
  },
23
23
  })
@@ -4,13 +4,13 @@ import {
4
4
  ref,
5
5
  VNode,
6
6
  onBeforeMount,
7
+ onBeforeUnmount,
7
8
  onMounted,
8
- onUpdated,
9
9
  provide,
10
10
  watch,
11
11
  } from 'vue'
12
12
 
13
- import { isInViewport } from '../../utils'
13
+ import { isInViewport, isRTL, Swipe } from '../../utils'
14
14
 
15
15
  const CCarousel = defineComponent({
16
16
  name: 'CCarousel',
@@ -63,6 +63,15 @@ const CCarousel = defineComponent({
63
63
  return ['crossfade', 'slide'].includes(value)
64
64
  },
65
65
  },
66
+ /**
67
+ * Set whether the carousel should support left/right swipe interactions on touchscreen devices.
68
+ *
69
+ * @since 5.10.0
70
+ */
71
+ touch: {
72
+ type: Boolean,
73
+ default: true,
74
+ },
66
75
  /**
67
76
  * Set whether the carousel should cycle continuously or have hard stops.
68
77
  */
@@ -71,7 +80,21 @@ const CCarousel = defineComponent({
71
80
  default: true,
72
81
  },
73
82
  },
74
- setup(props, { slots }) {
83
+ emits: [
84
+ /**
85
+ * Event called when the slide transition starts.
86
+ *
87
+ * @since 5.10.0
88
+ */
89
+ 'slide',
90
+ /**
91
+ * Event called when the slide transition ends.
92
+ *
93
+ * @since 5.10.0
94
+ */
95
+ 'slid',
96
+ ],
97
+ setup(props, { emit, slots }) {
75
98
  const carouselRef = ref()
76
99
 
77
100
  const active = ref(props.index)
@@ -82,6 +105,8 @@ const CCarousel = defineComponent({
82
105
  const timeout = ref()
83
106
  const visible = ref()
84
107
 
108
+ let swipe: Swipe | undefined
109
+
85
110
  const setAnimating = (value: boolean) => {
86
111
  animating.value = value
87
112
  }
@@ -99,7 +124,7 @@ const CCarousel = defineComponent({
99
124
  if (typeof props.interval === 'number') {
100
125
  timeout.value = setTimeout(
101
126
  () => nextItemWhenVisible(),
102
- typeof customInterval.value === 'number' ? customInterval.value : props.interval,
127
+ typeof customInterval.value === 'number' ? customInterval.value : props.interval
103
128
  )
104
129
  }
105
130
  }
@@ -110,9 +135,9 @@ const CCarousel = defineComponent({
110
135
  }
111
136
  direction.value = _direction
112
137
  if (_direction === 'next') {
113
- active.value === items.value.length - 1 ? (active.value = 0) : active.value++
138
+ active.value = active.value === items.value.length - 1 ? 0 : active.value + 1
114
139
  } else {
115
- active.value === 0 ? (active.value = items.value.length - 1) : active.value--
140
+ active.value = active.value === 0 ? items.value.length - 1 : active.value - 1
116
141
  }
117
142
  }
118
143
 
@@ -162,23 +187,37 @@ const CCarousel = defineComponent({
162
187
 
163
188
  onMounted(() => {
164
189
  window.addEventListener('scroll', handleScroll)
190
+
191
+ if (props.touch && carouselRef.value) {
192
+ swipe = new Swipe(carouselRef.value, {
193
+ onLeft: () => handleControlClick(isRTL(carouselRef.value) ? 'prev' : 'next'),
194
+ onRight: () => handleControlClick(isRTL(carouselRef.value) ? 'next' : 'prev'),
195
+ })
196
+ }
165
197
  })
166
198
 
167
- onUpdated(() => {
168
- watch(animating, () => {
169
- if (props.wrap) {
170
- !animating.value && cycle()
171
- return
172
- }
199
+ onBeforeUnmount(() => {
200
+ window.removeEventListener('scroll', handleScroll)
201
+ swipe?.dispose()
202
+ })
173
203
 
174
- if (!props.wrap && active.value < items.value.length - 1) {
175
- !animating.value && cycle()
176
- }
177
- })
204
+ watch(animating, () => {
205
+ if (animating.value) {
206
+ emit('slide', active.value, direction.value)
207
+ return
208
+ }
209
+
210
+ emit('slid', active.value, direction.value)
211
+
212
+ if (props.wrap || active.value < items.value.length - 1) {
213
+ cycle()
214
+ }
178
215
  })
179
216
 
180
217
  watch(visible, () => {
181
- visible.value && cycle()
218
+ if (visible.value) {
219
+ cycle()
220
+ }
182
221
  })
183
222
 
184
223
  return () =>
@@ -206,7 +245,7 @@ const CCarousel = defineComponent({
206
245
  ...(active.value === index && { class: 'active' }),
207
246
  onClick: () => handleIndicatorClick(index),
208
247
  })
209
- }),
248
+ })
210
249
  ),
211
250
  h(
212
251
  'div',
@@ -216,7 +255,7 @@ const CCarousel = defineComponent({
216
255
  active: active.value === index ? true : false,
217
256
  direction: direction.value,
218
257
  })
219
- }),
258
+ })
220
259
  ),
221
260
  props.controls && [
222
261
  h(
@@ -230,7 +269,7 @@ const CCarousel = defineComponent({
230
269
  [
231
270
  h('span', { class: 'carousel-control-prev-icon', ariaHidden: 'true' }),
232
271
  h('span', { class: 'visually-hidden' }, 'Previous'),
233
- ],
272
+ ]
234
273
  ),
235
274
  h(
236
275
  'button',
@@ -243,10 +282,10 @@ const CCarousel = defineComponent({
243
282
  [
244
283
  h('span', { class: 'carousel-control-next-icon', ariaHidden: 'true' }),
245
284
  h('span', { class: 'visually-hidden' }, 'Next'),
246
- ],
285
+ ]
247
286
  ),
248
287
  ],
249
- ],
288
+ ]
250
289
  )
251
290
  },
252
291
  })
@@ -9,7 +9,7 @@ const CCarouselCaption = defineComponent({
9
9
  {
10
10
  class: 'carousel-caption',
11
11
  },
12
- slots.default && slots.default(),
12
+ slots.default && slots.default()
13
13
  )
14
14
  },
15
15
  })
@@ -32,13 +32,14 @@ const CCarouselItem = defineComponent({
32
32
  const orderClassName = ref()
33
33
  const activeClassName = ref(active.value && 'active')
34
34
 
35
- // eslint-disable-next-line no-unused-vars
36
35
  const setAnimating = inject('setAnimating') as (value: boolean) => void
37
- // eslint-disable-next-line no-unused-vars
36
+
38
37
  const setCustomInterval = inject('setCustomInterval') as (value: boolean | number) => void
39
38
 
40
39
  watch(active, (active, prevActive) => {
41
- active && setCustomInterval(props.interval)
40
+ if (active) {
41
+ setCustomInterval(props.interval)
42
+ }
42
43
  if (!prevActive && active) {
43
44
  orderClassName.value = `carousel-item-${props.direction}`
44
45
  setCustomInterval(props.interval)
@@ -82,7 +83,7 @@ const CCarouselItem = defineComponent({
82
83
  ],
83
84
  ref: carouselItemRef,
84
85
  },
85
- slots.default && slots.default(),
86
+ slots.default && slots.default()
86
87
  )
87
88
  },
88
89
  })
@@ -45,6 +45,6 @@ describe(`Customize ${ComponentName} component`, () => {
45
45
  expect(customWrapper.classes('carousel')).toBe(true)
46
46
  expect(customWrapper.classes('slide')).toBe(true)
47
47
  expect(customWrapper.classes('carousel-fade')).toBe(true)
48
- expect(customWrapper.classes('carousel-dark')).toBe(true)
48
+ expect(customWrapper.attributes('data-coreui-theme')).toBe('dark')
49
49
  })
50
50
  })
@@ -0,0 +1,361 @@
1
+ import { computed, defineComponent, h, inject, ref, type VNode } from 'vue'
2
+
3
+ import { Color } from '../../props'
4
+ import { chipSetContextKey, type ChipSetConfig } from '../chip-set/useChipSet'
5
+
6
+ const CChip = defineComponent({
7
+ name: 'CChip',
8
+ props: {
9
+ /**
10
+ * Toggle the active state for the component.
11
+ */
12
+ active: Boolean,
13
+ /**
14
+ * Provides an accessible label for the remove button.
15
+ */
16
+ ariaRemoveLabel: {
17
+ type: String,
18
+ default: 'Remove',
19
+ },
20
+ /**
21
+ * Component used for the root node. Either a string to use a HTML element or a component.
22
+ */
23
+ as: {
24
+ type: String,
25
+ default: 'span',
26
+ },
27
+ /**
28
+ * Enables interactive hover styling and pointer cursor.
29
+ */
30
+ clickable: Boolean,
31
+ /**
32
+ * Sets the color context of the component to one of CoreUI's themed colors.
33
+ *
34
+ * @values 'primary', 'secondary', 'success', 'danger', 'warning', 'info', 'dark', 'light'
35
+ */
36
+ color: Color,
37
+ /**
38
+ * Toggle the disabled state for the component.
39
+ *
40
+ * Defaults to `undefined` so a chip can override the value inherited from a `CChipSet` (including turning it off).
41
+ */
42
+ disabled: {
43
+ type: Boolean,
44
+ default: undefined,
45
+ },
46
+ /**
47
+ * Turns the component into a filter chip. A filter chip is selectable and shows a leading check icon while selected.
48
+ *
49
+ * Defaults to `undefined` so a chip can override the value inherited from a `CChipSet`.
50
+ */
51
+ filter: {
52
+ type: Boolean,
53
+ default: undefined,
54
+ },
55
+ /**
56
+ * Displays a remove button inside the component.
57
+ *
58
+ * Defaults to `undefined` so a chip can override the value inherited from a `CChipSet` (including turning it off).
59
+ */
60
+ removable: {
61
+ type: Boolean,
62
+ default: undefined,
63
+ },
64
+ /**
65
+ * Replaces the default remove icon with a custom icon node.
66
+ */
67
+ removeIcon: {
68
+ type: [String, Object],
69
+ default: undefined,
70
+ },
71
+ /**
72
+ * Enables selectable behavior and keyboard toggle support.
73
+ *
74
+ * Defaults to `undefined` so a chip can override the value inherited from a `CChipSet`.
75
+ */
76
+ selectable: {
77
+ type: Boolean,
78
+ default: undefined,
79
+ },
80
+ /**
81
+ * Controls the selected state of a selectable component.
82
+ */
83
+ selected: {
84
+ type: Boolean,
85
+ default: undefined,
86
+ },
87
+ /**
88
+ * Replaces the default selected icon shown by a filter chip with a custom icon node.
89
+ */
90
+ selectedIcon: {
91
+ type: [String, Object],
92
+ default: undefined,
93
+ },
94
+ /**
95
+ * Size the component small or large.
96
+ *
97
+ * @values 'sm', 'lg'
98
+ */
99
+ size: {
100
+ type: String,
101
+ validator: (value: string) => {
102
+ return ['sm', 'lg'].includes(value)
103
+ },
104
+ },
105
+ /**
106
+ * Sets the value associated with the component, used by `CChipSet` to track selection.
107
+ */
108
+ value: {
109
+ type: String,
110
+ default: undefined,
111
+ },
112
+ /**
113
+ * Set the button variant to an outlined style.
114
+ *
115
+ * @values 'outline'
116
+ */
117
+ variant: {
118
+ type: String,
119
+ validator: (value: string) => {
120
+ return value === 'outline'
121
+ },
122
+ },
123
+ },
124
+ emits: [
125
+ /**
126
+ * Event called when the user clicks on the component.
127
+ */
128
+ 'click',
129
+ /**
130
+ * Event called when the component becomes deselected.
131
+ */
132
+ 'deselect',
133
+ /**
134
+ * Event called when the user presses a key.
135
+ */
136
+ 'keydown',
137
+ /**
138
+ * Event called when the component requests removal.
139
+ */
140
+ 'remove',
141
+ /**
142
+ * Event called when the component becomes selected.
143
+ */
144
+ 'select',
145
+ /**
146
+ * Event called when the selected state changes.
147
+ */
148
+ 'selected-change',
149
+ ],
150
+ setup(props, { attrs, emit, slots, expose }) {
151
+ const chipRef = ref<HTMLElement>()
152
+ const internalSelected = ref(false)
153
+
154
+ // A chip placed inside a CChipSet / CChipInput reads its coordinated state
155
+ // from the set context; standalone it manages its own.
156
+ const chipSet = inject(chipSetContextKey, null)
157
+
158
+ const config = <K extends keyof ChipSetConfig>(key: K): ChipSetConfig[K] | undefined =>
159
+ chipSet?.config.value[key]
160
+
161
+ // A chip's own prop (when set) overrides the set-level config; otherwise it
162
+ // inherits it. `??` makes this work because the overridable props default to
163
+ // `undefined`, so an explicit `false` still wins over the set.
164
+ const isDisabled = computed(() => Boolean(props.disabled ?? config('disabled')))
165
+ const isFilter = computed(() => Boolean(props.filter ?? config('filter')))
166
+ const isRemovable = computed(() => Boolean(props.removable ?? config('removable')))
167
+ // A filter chip is selectable by definition.
168
+ const isSelectable = computed(() =>
169
+ Boolean((props.selectable ?? config('selectable')) || isFilter.value)
170
+ )
171
+ const removeIcon = computed(() => props.removeIcon ?? config('removeIcon'))
172
+ const selectedIcon = computed(() => props.selectedIcon ?? config('selectedIcon'))
173
+ const ariaRemoveLabel = computed(() => props.ariaRemoveLabel)
174
+
175
+ const coordinated = computed(() => chipSet !== null && props.value !== undefined)
176
+
177
+ const selectedState = computed(() => {
178
+ if (coordinated.value) {
179
+ return chipSet!.isSelected(props.value as string)
180
+ }
181
+ return props.selected === undefined ? internalSelected.value : Boolean(props.selected)
182
+ })
183
+
184
+ const isFocusable = computed(() =>
185
+ Boolean(!isDisabled.value && (isSelectable.value || isRemovable.value))
186
+ )
187
+
188
+ const setSelectableState = (nextSelected: boolean, event: MouseEvent | KeyboardEvent): void => {
189
+ if (!isSelectable.value || isDisabled.value || nextSelected === selectedState.value) {
190
+ return
191
+ }
192
+
193
+ if (coordinated.value) {
194
+ chipSet!.toggleSelected(props.value as string, nextSelected, event)
195
+ } else if (props.selected === undefined) {
196
+ internalSelected.value = nextSelected
197
+ }
198
+
199
+ if (nextSelected) {
200
+ emit('select', event)
201
+ } else {
202
+ emit('deselect', event)
203
+ }
204
+
205
+ emit('selected-change', nextSelected, event)
206
+ }
207
+
208
+ const toggleSelectedState = (event: MouseEvent | KeyboardEvent): void => {
209
+ setSelectableState(!selectedState.value, event)
210
+ }
211
+
212
+ const handleRemove = (event: MouseEvent | KeyboardEvent): void => {
213
+ if (coordinated.value) {
214
+ chipSet!.removeChip(props.value as string, event)
215
+ }
216
+
217
+ emit('remove', event)
218
+ }
219
+
220
+ const handleRemoveClick = (event: MouseEvent): void => {
221
+ event.stopPropagation()
222
+ handleRemove(event)
223
+ }
224
+
225
+ const handleClick = (event: MouseEvent): void => {
226
+ if (isDisabled.value) {
227
+ return
228
+ }
229
+
230
+ if ((event.target as HTMLElement).closest('.chip-remove')) {
231
+ return
232
+ }
233
+
234
+ if (isSelectable.value) {
235
+ toggleSelectedState(event)
236
+ }
237
+
238
+ emit('click', event)
239
+ }
240
+
241
+ const handleKeydown = (event: KeyboardEvent): void => {
242
+ if (isDisabled.value) {
243
+ emit('keydown', event)
244
+ return
245
+ }
246
+
247
+ switch (event.key) {
248
+ case 'Enter':
249
+ case ' ':
250
+ case 'Spacebar': {
251
+ if (isSelectable.value) {
252
+ event.preventDefault()
253
+ toggleSelectedState(event)
254
+ }
255
+ break
256
+ }
257
+
258
+ case 'Backspace':
259
+ case 'Delete': {
260
+ if (isRemovable.value) {
261
+ event.preventDefault()
262
+ handleRemove(event)
263
+ }
264
+ break
265
+ }
266
+
267
+ // No default
268
+ }
269
+
270
+ emit('keydown', event)
271
+ }
272
+
273
+ expose({ chipRef })
274
+
275
+ return () => {
276
+ const removeIconVNode =
277
+ slots.removeIcon?.() ||
278
+ removeIcon.value ||
279
+ h(
280
+ 'svg',
281
+ {
282
+ xmlns: 'http://www.w3.org/2000/svg',
283
+ width: 16,
284
+ height: 16,
285
+ viewBox: '0 0 16 16',
286
+ fill: 'none',
287
+ stroke: 'currentColor',
288
+ 'stroke-width': 2,
289
+ 'stroke-linecap': 'round',
290
+ },
291
+ [h('line', { x1: 4, y1: 4, x2: 12, y2: 12 }), h('line', { x1: 12, y1: 4, x2: 4, y2: 12 })]
292
+ )
293
+
294
+ const selectedIconVNode =
295
+ slots.selectedIcon?.() ||
296
+ selectedIcon.value ||
297
+ h(
298
+ 'svg',
299
+ {
300
+ xmlns: 'http://www.w3.org/2000/svg',
301
+ width: 16,
302
+ height: 16,
303
+ viewBox: '0 0 512 512',
304
+ fill: 'currentColor',
305
+ },
306
+ h('path', {
307
+ d: 'M425.373 89.373 196 318.745 86.627 209.373l-45.254 45.254L196 409.255l274.627-274.628z',
308
+ })
309
+ )
310
+
311
+ const children = [
312
+ isFilter.value &&
313
+ selectedState.value &&
314
+ h('span', { class: 'chip-check', 'aria-hidden': 'true' }, selectedIconVNode as VNode),
315
+ slots.default && slots.default(),
316
+ isRemovable.value &&
317
+ !isDisabled.value &&
318
+ h(
319
+ 'button',
320
+ {
321
+ type: 'button',
322
+ class: 'chip-remove',
323
+ 'aria-label': ariaRemoveLabel.value,
324
+ onClick: handleRemoveClick,
325
+ tabindex: -1,
326
+ },
327
+ removeIconVNode as VNode
328
+ ),
329
+ ].filter(Boolean)
330
+
331
+ return h(
332
+ props.as,
333
+ {
334
+ ref: chipRef,
335
+ class: [
336
+ 'chip',
337
+ {
338
+ active: isSelectable.value ? selectedState.value : props.active,
339
+ disabled: isDisabled.value,
340
+ [`chip-${props.color}`]: props.color,
341
+ [`chip-${props.size}`]: props.size,
342
+ 'chip-clickable': props.clickable || isSelectable.value || attrs.onClick,
343
+ 'chip-outline': props.variant === 'outline',
344
+ },
345
+ attrs.class,
346
+ ],
347
+ 'data-coreui-chip-value': props.value,
348
+ ...(isDisabled.value && { 'aria-disabled': true }),
349
+ ...(isSelectable.value && { 'aria-selected': selectedState.value }),
350
+ ...(isFocusable.value && !attrs.tabindex && { tabindex: 0 }),
351
+ onClick: handleClick,
352
+ onKeydown: handleKeydown,
353
+ ...(props.as === 'button' && { disabled: isDisabled.value }),
354
+ },
355
+ children
356
+ )
357
+ }
358
+ },
359
+ })
360
+
361
+ export { CChip }