@coreui/vue-pro 5.18.0 → 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 (422) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/carousel/CCarousel.d.ts +24 -2
  3. package/dist/cjs/components/carousel/CCarousel.js +51 -14
  4. package/dist/cjs/components/carousel/CCarousel.js.map +1 -1
  5. package/dist/cjs/components/carousel/CCarouselItem.js +3 -3
  6. package/dist/cjs/components/carousel/CCarouselItem.js.map +1 -1
  7. package/dist/cjs/components/chip/CChip.d.ts +97 -11
  8. package/dist/cjs/components/chip/CChip.js +107 -79
  9. package/dist/cjs/components/chip/CChip.js.map +1 -1
  10. package/dist/cjs/components/chip/const.d.ts +1 -0
  11. package/dist/cjs/components/chip/const.js +8 -0
  12. package/dist/cjs/components/chip/const.js.map +1 -0
  13. package/dist/cjs/components/chip-input/CChipInput.d.ts +30 -2
  14. package/dist/cjs/components/chip-input/CChipInput.js +108 -66
  15. package/dist/cjs/components/chip-input/CChipInput.js.map +1 -1
  16. package/dist/cjs/components/chip-set/CChipSet.d.ts +145 -0
  17. package/dist/cjs/components/chip-set/CChipSet.js +127 -0
  18. package/dist/cjs/components/chip-set/CChipSet.js.map +1 -0
  19. package/dist/cjs/components/chip-set/buildChips.d.ts +13 -0
  20. package/dist/cjs/components/chip-set/buildChips.js +19 -0
  21. package/dist/cjs/components/chip-set/buildChips.js.map +1 -0
  22. package/dist/cjs/components/chip-set/index.d.ts +2 -0
  23. package/dist/cjs/components/chip-set/useChipSet.d.ts +42 -0
  24. package/dist/cjs/components/chip-set/useChipSet.js +115 -0
  25. package/dist/cjs/components/chip-set/useChipSet.js.map +1 -0
  26. package/dist/cjs/components/collapse/CCollapse.js +2 -2
  27. package/dist/cjs/components/collapse/CCollapse.js.map +1 -1
  28. package/dist/cjs/components/dropdown/CDropdown.d.ts +24 -1
  29. package/dist/cjs/components/dropdown/CDropdown.js +34 -17
  30. package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
  31. package/dist/cjs/components/dropdown/CDropdownToggle.js +1 -1
  32. package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
  33. package/dist/cjs/components/focus-trap/CFocusTrap.js +4 -1
  34. package/dist/cjs/components/focus-trap/CFocusTrap.js.map +1 -1
  35. package/dist/cjs/components/form/CFormInput.d.ts +3 -0
  36. package/dist/cjs/components/form/CFormRange.d.ts +2 -2
  37. package/dist/cjs/components/form/CFormRange.js +2 -2
  38. package/dist/cjs/components/form/CFormRange.js.map +1 -1
  39. package/dist/cjs/components/grid/CContainer.js +3 -1
  40. package/dist/cjs/components/grid/CContainer.js.map +1 -1
  41. package/dist/cjs/components/index.d.ts +2 -0
  42. package/dist/cjs/components/index.js +30 -24
  43. package/dist/cjs/components/index.js.map +1 -1
  44. package/dist/cjs/components/modal/CModal.js +3 -2
  45. package/dist/cjs/components/modal/CModal.js.map +1 -1
  46. package/dist/cjs/components/modal/CModalHeader.js +6 -3
  47. package/dist/cjs/components/modal/CModalHeader.js.map +1 -1
  48. package/dist/cjs/components/multi-select/CMultiSelect.d.ts +206 -3
  49. package/dist/cjs/components/multi-select/CMultiSelect.js +304 -28
  50. package/dist/cjs/components/multi-select/CMultiSelect.js.map +1 -1
  51. package/dist/cjs/components/multi-select/CMultiSelectNativeSelect.js +1 -2
  52. package/dist/cjs/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
  53. package/dist/cjs/components/multi-select/CMultiSelectOptions.d.ts +16 -1
  54. package/dist/cjs/components/multi-select/CMultiSelectOptions.js +59 -3
  55. package/dist/cjs/components/multi-select/CMultiSelectOptions.js.map +1 -1
  56. package/dist/cjs/components/multi-select/CMultiSelectSelection.d.ts +9 -0
  57. package/dist/cjs/components/multi-select/CMultiSelectSelection.js +6 -1
  58. package/dist/cjs/components/multi-select/CMultiSelectSelection.js.map +1 -1
  59. package/dist/cjs/components/multi-select/utils.js +0 -3
  60. package/dist/cjs/components/multi-select/utils.js.map +1 -1
  61. package/dist/cjs/components/nav/CNav.js +8 -1
  62. package/dist/cjs/components/nav/CNav.js.map +1 -1
  63. package/dist/cjs/components/nav/CNavGroup.d.ts +15 -7
  64. package/dist/cjs/components/nav/CNavGroup.js +113 -88
  65. package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
  66. package/dist/cjs/components/nav/CNavLink.js +11 -0
  67. package/dist/cjs/components/nav/CNavLink.js.map +1 -1
  68. package/dist/cjs/components/popover/CPopover.d.ts +24 -1
  69. package/dist/cjs/components/popover/CPopover.js +18 -1
  70. package/dist/cjs/components/popover/CPopover.js.map +1 -1
  71. package/dist/cjs/components/range-slider/CRangeSlider.d.ts +1 -1
  72. package/dist/cjs/components/search-button/CSearchButton.d.ts +63 -0
  73. package/dist/cjs/components/search-button/CSearchButton.js +125 -0
  74. package/dist/cjs/components/search-button/CSearchButton.js.map +1 -0
  75. package/dist/cjs/components/search-button/index.d.ts +6 -0
  76. package/dist/cjs/components/search-button/index.js +13 -0
  77. package/dist/cjs/components/search-button/index.js.map +1 -0
  78. package/dist/cjs/components/search-button/types.d.ts +10 -0
  79. package/dist/cjs/components/search-button/utils.d.ts +11 -0
  80. package/dist/cjs/components/search-button/utils.js +114 -0
  81. package/dist/cjs/components/search-button/utils.js.map +1 -0
  82. package/dist/cjs/components/sidebar/CSidebar.js +4 -3
  83. package/dist/cjs/components/sidebar/CSidebar.js.map +1 -1
  84. package/dist/cjs/components/sidebar/CSidebarNav.d.ts +32 -0
  85. package/dist/cjs/components/sidebar/CSidebarNav.js +28 -24
  86. package/dist/cjs/components/sidebar/CSidebarNav.js.map +1 -1
  87. package/dist/cjs/components/spinner/CSpinner.d.ts +4 -4
  88. package/dist/cjs/components/spinner/CSpinner.js +2 -2
  89. package/dist/cjs/components/spinner/CSpinner.js.map +1 -1
  90. package/dist/cjs/components/table/utils.js +4 -4
  91. package/dist/cjs/components/table/utils.js.map +1 -1
  92. package/dist/cjs/components/tabs/CTabList.js +8 -2
  93. package/dist/cjs/components/tabs/CTabList.js.map +1 -1
  94. package/dist/cjs/components/tabs/CTabs.js +1 -1
  95. package/dist/cjs/components/tabs/CTabs.js.map +1 -1
  96. package/dist/cjs/components/toast/CToast.js +12 -2
  97. package/dist/cjs/components/toast/CToast.js.map +1 -1
  98. package/dist/cjs/components/toast/CToastClose.d.ts +3 -2
  99. package/dist/cjs/components/toast/CToastClose.js +2 -3
  100. package/dist/cjs/components/toast/CToastClose.js.map +1 -1
  101. package/dist/cjs/components/tooltip/CTooltip.d.ts +24 -1
  102. package/dist/cjs/components/tooltip/CTooltip.js +18 -1
  103. package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
  104. package/dist/cjs/directives/v-c-popover.js +6 -3
  105. package/dist/cjs/directives/v-c-popover.js.map +1 -1
  106. package/dist/cjs/directives/v-c-tooltip.js +6 -3
  107. package/dist/cjs/directives/v-c-tooltip.js.map +1 -1
  108. package/dist/cjs/directives/v-c-visible.js +1 -1
  109. package/dist/cjs/directives/v-c-visible.js.map +1 -1
  110. package/dist/cjs/index.js +36 -30
  111. package/dist/cjs/index.js.map +1 -1
  112. package/dist/cjs/node_modules/@coreui/icons/dist/esm/free/cil-arrow-bottom.js +1 -1
  113. package/dist/cjs/node_modules/@coreui/icons/dist/esm/free/cil-arrow-bottom.js.map +1 -1
  114. package/dist/cjs/node_modules/@coreui/icons/dist/esm/free/cil-arrow-top.js +1 -1
  115. package/dist/cjs/node_modules/@coreui/icons/dist/esm/free/cil-arrow-top.js.map +1 -1
  116. package/dist/cjs/node_modules/@coreui/icons/dist/esm/free/cil-filter-x.js +1 -1
  117. package/dist/cjs/node_modules/@coreui/icons/dist/esm/free/cil-filter-x.js.map +1 -1
  118. package/dist/cjs/node_modules/@coreui/icons/dist/esm/free/cil-swap-vertical.js +1 -1
  119. package/dist/cjs/node_modules/@coreui/icons/dist/esm/free/cil-swap-vertical.js.map +1 -1
  120. package/dist/cjs/utils/index.d.ts +2 -1
  121. package/dist/cjs/utils/swipe.d.ts +26 -0
  122. package/dist/cjs/utils/swipe.js +94 -0
  123. package/dist/cjs/utils/swipe.js.map +1 -0
  124. package/dist/cjs/utils/transition.js.map +1 -1
  125. package/dist/esm/components/carousel/CCarousel.d.ts +24 -2
  126. package/dist/esm/components/carousel/CCarousel.js +52 -15
  127. package/dist/esm/components/carousel/CCarousel.js.map +1 -1
  128. package/dist/esm/components/carousel/CCarouselItem.js +3 -3
  129. package/dist/esm/components/carousel/CCarouselItem.js.map +1 -1
  130. package/dist/esm/components/chip/CChip.d.ts +97 -11
  131. package/dist/esm/components/chip/CChip.js +108 -80
  132. package/dist/esm/components/chip/CChip.js.map +1 -1
  133. package/dist/esm/components/chip/const.d.ts +1 -0
  134. package/dist/esm/components/chip/const.js +6 -0
  135. package/dist/esm/components/chip/const.js.map +1 -0
  136. package/dist/esm/components/chip-input/CChipInput.d.ts +30 -2
  137. package/dist/esm/components/chip-input/CChipInput.js +109 -67
  138. package/dist/esm/components/chip-input/CChipInput.js.map +1 -1
  139. package/dist/esm/components/chip-set/CChipSet.d.ts +145 -0
  140. package/dist/esm/components/chip-set/CChipSet.js +125 -0
  141. package/dist/esm/components/chip-set/CChipSet.js.map +1 -0
  142. package/dist/esm/components/chip-set/buildChips.d.ts +13 -0
  143. package/dist/esm/components/chip-set/buildChips.js +17 -0
  144. package/dist/esm/components/chip-set/buildChips.js.map +1 -0
  145. package/dist/esm/components/chip-set/index.d.ts +2 -0
  146. package/dist/esm/components/chip-set/useChipSet.d.ts +42 -0
  147. package/dist/esm/components/chip-set/useChipSet.js +112 -0
  148. package/dist/esm/components/chip-set/useChipSet.js.map +1 -0
  149. package/dist/esm/components/collapse/CCollapse.js +2 -2
  150. package/dist/esm/components/collapse/CCollapse.js.map +1 -1
  151. package/dist/esm/components/dropdown/CDropdown.d.ts +24 -1
  152. package/dist/esm/components/dropdown/CDropdown.js +34 -17
  153. package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
  154. package/dist/esm/components/dropdown/CDropdownToggle.js +1 -1
  155. package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
  156. package/dist/esm/components/focus-trap/CFocusTrap.js +4 -1
  157. package/dist/esm/components/focus-trap/CFocusTrap.js.map +1 -1
  158. package/dist/esm/components/form/CFormInput.d.ts +3 -0
  159. package/dist/esm/components/form/CFormRange.d.ts +2 -2
  160. package/dist/esm/components/form/CFormRange.js +2 -2
  161. package/dist/esm/components/form/CFormRange.js.map +1 -1
  162. package/dist/esm/components/grid/CContainer.js +3 -1
  163. package/dist/esm/components/grid/CContainer.js.map +1 -1
  164. package/dist/esm/components/index.d.ts +2 -0
  165. package/dist/esm/components/index.js +3 -0
  166. package/dist/esm/components/index.js.map +1 -1
  167. package/dist/esm/components/modal/CModal.js +3 -2
  168. package/dist/esm/components/modal/CModal.js.map +1 -1
  169. package/dist/esm/components/modal/CModalHeader.js +6 -3
  170. package/dist/esm/components/modal/CModalHeader.js.map +1 -1
  171. package/dist/esm/components/multi-select/CMultiSelect.d.ts +206 -3
  172. package/dist/esm/components/multi-select/CMultiSelect.js +305 -29
  173. package/dist/esm/components/multi-select/CMultiSelect.js.map +1 -1
  174. package/dist/esm/components/multi-select/CMultiSelectNativeSelect.js +1 -2
  175. package/dist/esm/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
  176. package/dist/esm/components/multi-select/CMultiSelectOptions.d.ts +16 -1
  177. package/dist/esm/components/multi-select/CMultiSelectOptions.js +59 -3
  178. package/dist/esm/components/multi-select/CMultiSelectOptions.js.map +1 -1
  179. package/dist/esm/components/multi-select/CMultiSelectSelection.d.ts +9 -0
  180. package/dist/esm/components/multi-select/CMultiSelectSelection.js +6 -1
  181. package/dist/esm/components/multi-select/CMultiSelectSelection.js.map +1 -1
  182. package/dist/esm/components/multi-select/utils.js +0 -3
  183. package/dist/esm/components/multi-select/utils.js.map +1 -1
  184. package/dist/esm/components/nav/CNav.js +8 -1
  185. package/dist/esm/components/nav/CNav.js.map +1 -1
  186. package/dist/esm/components/nav/CNavGroup.d.ts +15 -7
  187. package/dist/esm/components/nav/CNavGroup.js +114 -89
  188. package/dist/esm/components/nav/CNavGroup.js.map +1 -1
  189. package/dist/esm/components/nav/CNavLink.js +12 -1
  190. package/dist/esm/components/nav/CNavLink.js.map +1 -1
  191. package/dist/esm/components/popover/CPopover.d.ts +24 -1
  192. package/dist/esm/components/popover/CPopover.js +18 -1
  193. package/dist/esm/components/popover/CPopover.js.map +1 -1
  194. package/dist/esm/components/range-slider/CRangeSlider.d.ts +1 -1
  195. package/dist/esm/components/search-button/CSearchButton.d.ts +63 -0
  196. package/dist/esm/components/search-button/CSearchButton.js +123 -0
  197. package/dist/esm/components/search-button/CSearchButton.js.map +1 -0
  198. package/dist/esm/components/search-button/index.d.ts +6 -0
  199. package/dist/esm/components/search-button/index.js +10 -0
  200. package/dist/esm/components/search-button/index.js.map +1 -0
  201. package/dist/esm/components/search-button/types.d.ts +10 -0
  202. package/dist/esm/components/search-button/utils.d.ts +11 -0
  203. package/dist/esm/components/search-button/utils.js +103 -0
  204. package/dist/esm/components/search-button/utils.js.map +1 -0
  205. package/dist/esm/components/sidebar/CSidebar.js +4 -3
  206. package/dist/esm/components/sidebar/CSidebar.js.map +1 -1
  207. package/dist/esm/components/sidebar/CSidebarNav.d.ts +32 -0
  208. package/dist/esm/components/sidebar/CSidebarNav.js +29 -25
  209. package/dist/esm/components/sidebar/CSidebarNav.js.map +1 -1
  210. package/dist/esm/components/spinner/CSpinner.d.ts +4 -4
  211. package/dist/esm/components/spinner/CSpinner.js +2 -2
  212. package/dist/esm/components/spinner/CSpinner.js.map +1 -1
  213. package/dist/esm/components/table/utils.js +4 -4
  214. package/dist/esm/components/table/utils.js.map +1 -1
  215. package/dist/esm/components/tabs/CTabList.js +8 -2
  216. package/dist/esm/components/tabs/CTabList.js.map +1 -1
  217. package/dist/esm/components/tabs/CTabs.js +1 -1
  218. package/dist/esm/components/tabs/CTabs.js.map +1 -1
  219. package/dist/esm/components/toast/CToast.js +12 -2
  220. package/dist/esm/components/toast/CToast.js.map +1 -1
  221. package/dist/esm/components/toast/CToastClose.d.ts +3 -2
  222. package/dist/esm/components/toast/CToastClose.js +2 -3
  223. package/dist/esm/components/toast/CToastClose.js.map +1 -1
  224. package/dist/esm/components/tooltip/CTooltip.d.ts +24 -1
  225. package/dist/esm/components/tooltip/CTooltip.js +18 -1
  226. package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
  227. package/dist/esm/directives/v-c-popover.js +6 -3
  228. package/dist/esm/directives/v-c-popover.js.map +1 -1
  229. package/dist/esm/directives/v-c-tooltip.js +6 -3
  230. package/dist/esm/directives/v-c-tooltip.js.map +1 -1
  231. package/dist/esm/directives/v-c-visible.js +1 -1
  232. package/dist/esm/directives/v-c-visible.js.map +1 -1
  233. package/dist/esm/index.js +3 -0
  234. package/dist/esm/index.js.map +1 -1
  235. package/dist/esm/node_modules/@coreui/icons/dist/esm/free/cil-arrow-bottom.js +1 -1
  236. package/dist/esm/node_modules/@coreui/icons/dist/esm/free/cil-arrow-bottom.js.map +1 -1
  237. package/dist/esm/node_modules/@coreui/icons/dist/esm/free/cil-arrow-top.js +1 -1
  238. package/dist/esm/node_modules/@coreui/icons/dist/esm/free/cil-arrow-top.js.map +1 -1
  239. package/dist/esm/node_modules/@coreui/icons/dist/esm/free/cil-filter-x.js +1 -1
  240. package/dist/esm/node_modules/@coreui/icons/dist/esm/free/cil-filter-x.js.map +1 -1
  241. package/dist/esm/node_modules/@coreui/icons/dist/esm/free/cil-swap-vertical.js +1 -1
  242. package/dist/esm/node_modules/@coreui/icons/dist/esm/free/cil-swap-vertical.js.map +1 -1
  243. package/dist/esm/utils/index.d.ts +2 -1
  244. package/dist/esm/utils/swipe.d.ts +26 -0
  245. package/dist/esm/utils/swipe.js +90 -0
  246. package/dist/esm/utils/swipe.js.map +1 -0
  247. package/dist/esm/utils/transition.js.map +1 -1
  248. package/package.json +6 -6
  249. package/src/components/accordion/CAccordion.ts +2 -2
  250. package/src/components/accordion/CAccordionBody.ts +1 -1
  251. package/src/components/accordion/CAccordionButton.ts +1 -1
  252. package/src/components/accordion/CAccordionHeader.ts +2 -2
  253. package/src/components/accordion/__tests__/__snapshots__/CAccordionButton.spec.ts.snap +1 -1
  254. package/src/components/accordion/__tests__/__snapshots__/CAccordionHeader.spec.ts.snap +1 -1
  255. package/src/components/alert/CAlert.ts +3 -3
  256. package/src/components/alert/CAlertHeading.ts +1 -1
  257. package/src/components/alert/CAlertLink.ts +1 -1
  258. package/src/components/autocomplete/__tests__/CAutocomplete.spec.ts +5 -1
  259. package/src/components/autocomplete/__tests__/CAutocompleteOptions.spec.ts +8 -5
  260. package/src/components/avatar/CAvatar.ts +1 -1
  261. package/src/components/backdrop/CBackdrop.ts +1 -1
  262. package/src/components/badge/CBadge.ts +1 -1
  263. package/src/components/breadcrumb/CBreadcrumb.ts +1 -1
  264. package/src/components/breadcrumb/CBreadcrumbItem.ts +1 -1
  265. package/src/components/button/CButton.ts +1 -1
  266. package/src/components/button/__tests__/CButton.spec.ts +0 -1
  267. package/src/components/button/__tests__/__snapshots__/CButton.spec.ts.snap +1 -1
  268. package/src/components/button-group/CButtonGroup.ts +1 -1
  269. package/src/components/callout/CCallout.ts +1 -1
  270. package/src/components/card/CCard.ts +1 -1
  271. package/src/components/card/CCardImage.ts +1 -1
  272. package/src/components/card/CCardLink.ts +1 -1
  273. package/src/components/carousel/CCarousel.ts +61 -22
  274. package/src/components/carousel/CCarouselCaption.ts +1 -1
  275. package/src/components/carousel/CCarouselItem.ts +5 -4
  276. package/src/components/carousel/__tests__/CCarousel.spec.ts +1 -1
  277. package/src/components/chip/CChip.ts +123 -101
  278. package/src/components/chip/__tests__/CChip.spec.ts +26 -0
  279. package/src/components/chip/const.ts +3 -0
  280. package/src/components/chip-input/CChipInput.ts +134 -82
  281. package/src/components/chip-input/__tests__/CChipInput.spec.ts +80 -4
  282. package/src/components/chip-input/__tests__/__snapshots__/CChipInput.spec.ts.snap +1 -1
  283. package/src/components/chip-set/CChipSet.ts +140 -0
  284. package/src/components/chip-set/__tests__/CChipSet.spec.ts +174 -0
  285. package/src/components/chip-set/buildChips.ts +29 -0
  286. package/src/components/chip-set/index.ts +3 -0
  287. package/src/components/chip-set/useChipSet.ts +168 -0
  288. package/src/components/collapse/CCollapse.ts +5 -5
  289. package/src/components/collapse/__tests__/CCollapse.spec.ts +48 -0
  290. package/src/components/collapse/__tests__/__snapshots__/CCollapse.spec.ts.snap +7 -0
  291. package/src/components/conditional-teleport/CConditionalTeleport.ts +3 -3
  292. package/src/components/conditional-teleport/__tests__/CConditionalTeleport.spec.ts +28 -0
  293. package/src/components/dropdown/CDropdown.ts +43 -23
  294. package/src/components/dropdown/CDropdownHeader.ts +1 -1
  295. package/src/components/dropdown/CDropdownItem.ts +1 -1
  296. package/src/components/dropdown/CDropdownMenu.ts +2 -2
  297. package/src/components/dropdown/CDropdownToggle.ts +4 -4
  298. package/src/components/dropdown/__tests__/CDropdown.spec.ts +1 -1
  299. package/src/components/dropdown/__tests__/CDropdownMenu.spec.ts +11 -7
  300. package/src/components/dropdown/__tests__/CDropdownPopperConfig.spec.ts +63 -0
  301. package/src/components/dropdown/__tests__/CDropdownToggle.spec.ts +0 -2
  302. package/src/components/dropdown/__tests__/__snapshots__/CDropdown.spec.ts.snap +1 -1
  303. package/src/components/dropdown/__tests__/__snapshots__/CDropdownMenu.spec.ts.snap +4 -0
  304. package/src/components/dropdown/utils.ts +2 -2
  305. package/src/components/focus-trap/CFocusTrap.ts +9 -6
  306. package/src/components/focus-trap/__tests__/CFocusTrap.spec.ts +42 -0
  307. package/src/components/footer/CFooter.ts +1 -1
  308. package/src/components/form/CForm.ts +1 -1
  309. package/src/components/form/CFormCheck.ts +5 -5
  310. package/src/components/form/CFormControlValidation.ts +3 -3
  311. package/src/components/form/CFormFeedback.ts +1 -1
  312. package/src/components/form/CFormFloating.ts +1 -1
  313. package/src/components/form/CFormInput.ts +2 -2
  314. package/src/components/form/CFormLabel.ts +1 -1
  315. package/src/components/form/CFormRange.ts +4 -4
  316. package/src/components/form/CFormSelect.ts +3 -3
  317. package/src/components/form/CFormSwitch.ts +2 -2
  318. package/src/components/form/CFormTextarea.ts +2 -2
  319. package/src/components/form/CInputGroup.ts +1 -1
  320. package/src/components/form/__tests__/CFormRange.spec.ts +2 -2
  321. package/src/components/form/__tests__/CFormText.spec.ts +1 -1
  322. package/src/components/form/__tests__/__snapshots__/CFormRange.spec.ts.snap +1 -1
  323. package/src/components/grid/CCol.ts +1 -1
  324. package/src/components/grid/CContainer.ts +4 -2
  325. package/src/components/grid/CRow.ts +1 -1
  326. package/src/components/header/CHeader.ts +2 -2
  327. package/src/components/header/CHeaderNav.ts +1 -1
  328. package/src/components/header/CHeaderToggler.ts +1 -1
  329. package/src/components/header/__tests__/CHeader.spec.ts +1 -2
  330. package/src/components/index.ts +2 -0
  331. package/src/components/link/CLink.ts +1 -1
  332. package/src/components/list-group/CListGroup.ts +1 -1
  333. package/src/components/list-group/CListGroupItem.ts +1 -1
  334. package/src/components/modal/CModal.ts +3 -2
  335. package/src/components/modal/CModalHeader.ts +10 -3
  336. package/src/components/modal/__tests__/__snapshots__/CModal.spec.ts.snap +9 -4
  337. package/src/components/multi-select/CMultiSelect.ts +380 -41
  338. package/src/components/multi-select/CMultiSelectNativeSelect.ts +1 -2
  339. package/src/components/multi-select/CMultiSelectOptions.ts +77 -3
  340. package/src/components/multi-select/CMultiSelectSelection.ts +6 -1
  341. package/src/components/nav/CNav.ts +9 -2
  342. package/src/components/nav/CNavGroup.ts +147 -99
  343. package/src/components/nav/CNavItem.ts +2 -2
  344. package/src/components/nav/CNavLink.ts +19 -2
  345. package/src/components/nav/__tests__/CNavGroup.spec.ts +188 -6
  346. package/src/components/nav/__tests__/CNavItem.spec.ts +6 -6
  347. package/src/components/nav/__tests__/__snapshots__/CNavGroup.spec.ts.snap +3 -7
  348. package/src/components/nav/__tests__/__snapshots__/CNavItem.spec.ts.snap +1 -5
  349. package/src/components/navbar/CNavbar.ts +2 -2
  350. package/src/components/navbar/CNavbarBrand.ts +1 -1
  351. package/src/components/navbar/CNavbarNav.ts +1 -1
  352. package/src/components/navbar/CNavbarToggler.ts +1 -1
  353. package/src/components/navbar/__tests__/CNavbar.spec.ts +1 -1
  354. package/src/components/pagination/CPagination.ts +2 -2
  355. package/src/components/pagination/CPaginationItem.ts +2 -2
  356. package/src/components/placeholder/CPlaceholder.ts +1 -1
  357. package/src/components/popover/CPopover.ts +27 -7
  358. package/src/components/popover/__tests__/CPopover.spec.ts +43 -0
  359. package/src/components/progress/CProgress.ts +2 -2
  360. package/src/components/progress/CProgressBar.ts +1 -1
  361. package/src/components/progress/CProgressStacked.ts +1 -1
  362. package/src/components/progress/__tests__/CProgressBar.spec.ts +0 -4
  363. package/src/components/search-button/CSearchButton.ts +163 -0
  364. package/src/components/search-button/__tests__/CSearchButton.spec.ts +128 -0
  365. package/src/components/search-button/__tests__/__snapshots__/CSearchButton.spec.ts.snap +13 -0
  366. package/src/components/search-button/index.ts +10 -0
  367. package/src/components/search-button/types.ts +10 -0
  368. package/src/components/search-button/utils.ts +140 -0
  369. package/src/components/sidebar/CSidebar.ts +9 -6
  370. package/src/components/sidebar/CSidebarBrand.ts +1 -1
  371. package/src/components/sidebar/CSidebarNav.ts +30 -28
  372. package/src/components/sidebar/__tests__/CSidebar.spec.ts +1 -1
  373. package/src/components/spinner/CSpinner.ts +6 -6
  374. package/src/components/spinner/__tests__/CSpinner.spec.ts +0 -1
  375. package/src/components/stepper/__tests__/CStepper.spec.ts +13 -8
  376. package/src/components/table/CTable.ts +16 -16
  377. package/src/components/table/CTableBody.ts +1 -1
  378. package/src/components/table/CTableDataCell.ts +1 -1
  379. package/src/components/table/CTableFoot.ts +1 -1
  380. package/src/components/table/CTableHead.ts +1 -1
  381. package/src/components/table/CTableHeaderCell.ts +1 -1
  382. package/src/components/table/CTableRow.ts +1 -1
  383. package/src/components/table/types.ts +1 -0
  384. package/src/components/table/utils.ts +4 -4
  385. package/src/components/tabs/CTab.ts +1 -1
  386. package/src/components/tabs/CTabList.ts +12 -5
  387. package/src/components/tabs/CTabPane.ts +3 -3
  388. package/src/components/tabs/CTabPanel.ts +5 -5
  389. package/src/components/tabs/CTabs.ts +2 -2
  390. package/src/components/tabs/__tests__/__snapshots__/CTabPane.spec.ts.snap +1 -1
  391. package/src/components/toast/CToast.ts +12 -4
  392. package/src/components/toast/CToastClose.ts +5 -6
  393. package/src/components/toast/CToaster.ts +1 -1
  394. package/src/components/toast/__tests__/CToaster.spec.ts +0 -2
  395. package/src/components/toast/__tests__/__snapshots__/CToastClose.spec.ts.snap +1 -1
  396. package/src/components/tooltip/CTooltip.ts +26 -6
  397. package/src/components/tooltip/__tests__/CTooltip.spec.ts +43 -0
  398. package/src/components/widgets/CWidgetStatsA.ts +4 -4
  399. package/src/components/widgets/CWidgetStatsB.ts +5 -5
  400. package/src/components/widgets/CWidgetStatsC.ts +5 -5
  401. package/src/components/widgets/CWidgetStatsD.ts +5 -5
  402. package/src/components/widgets/CWidgetStatsE.ts +4 -4
  403. package/src/components/widgets/CWidgetStatsF.ts +5 -5
  404. package/src/directives/__tests__/v-c-placeholder.spec.ts +33 -0
  405. package/src/directives/__tests__/v-c-popover.spec.ts +67 -0
  406. package/src/directives/__tests__/v-c-tooltip.spec.ts +66 -0
  407. package/src/directives/v-c-popover.ts +8 -5
  408. package/src/directives/v-c-tooltip.ts +8 -5
  409. package/src/directives/v-c-visible.ts +1 -1
  410. package/src/index.ts +1 -1
  411. package/src/utils/ComponentProps.ts +1 -0
  412. package/src/utils/__tests__/swipe.spec.ts +82 -0
  413. package/src/utils/getNextActiveElement.ts +1 -1
  414. package/src/utils/index.ts +2 -0
  415. package/src/utils/swipe.ts +114 -0
  416. package/src/utils/transition.ts +2 -2
  417. package/dist/cjs/components/collapse/__test__/CCollapse.spec.d.ts +0 -1
  418. package/dist/esm/components/collapse/__test__/CCollapse.spec.d.ts +0 -1
  419. package/src/components/accordion/__tests__/CAccordionCollapse.spec.ts +0 -28
  420. package/src/components/accordion/__tests__/__snapshots__/CAccordionCollapse.spec.ts.snap +0 -7
  421. package/src/components/collapse/__test__/CCollapse.spec.ts +0 -44
  422. package/src/components/collapse/__test__/__snapshots__/CCollapse.spec.ts.snap +0 -13
@@ -0,0 +1,67 @@
1
+ import { mount } from '@vue/test-utils'
2
+ import { h, withDirectives } from 'vue'
3
+ import { createPopper } from '@popperjs/core'
4
+ import vCPopover from '../v-c-popover'
5
+
6
+ jest.mock('@popperjs/core', () => ({ createPopper: jest.fn() }))
7
+
8
+ const mockedCreatePopper = createPopper as jest.Mock
9
+
10
+ const renderWithDirective = (value: unknown) =>
11
+ mount(
12
+ {
13
+ render: () => withDirectives(h('button', 'Trigger'), [[vCPopover, value]]),
14
+ },
15
+ { attachTo: document.body }
16
+ )
17
+
18
+ describe('v-c-popover directive', () => {
19
+ afterEach(() => {
20
+ document.body.querySelectorAll('.popover').forEach((el) => el.remove())
21
+ mockedCreatePopper.mockClear()
22
+ })
23
+
24
+ it('creates a popover on click with header and content', async () => {
25
+ const wrapper = renderWithDirective({ header: 'Title', content: 'Body', trigger: 'click' })
26
+ await wrapper.find('button').trigger('click')
27
+
28
+ const popover = document.body.querySelector('.popover')
29
+ expect(popover).not.toBeNull()
30
+ expect(popover?.querySelector('.popover-header')?.textContent).toBe('Title')
31
+ expect(popover?.querySelector('.popover-body')?.textContent).toBe('Body')
32
+ expect(mockedCreatePopper).toHaveBeenCalled()
33
+ })
34
+
35
+ it('accepts a plain string value as content', async () => {
36
+ const wrapper = renderWithDirective('Just content')
37
+ await wrapper.find('button').trigger('click')
38
+ expect(document.body.querySelector('.popover-body')?.textContent).toBe('Just content')
39
+ })
40
+
41
+ it('toggles the popover off on a second click', async () => {
42
+ const wrapper = renderWithDirective({ content: 'Body', trigger: 'click' })
43
+ const button = wrapper.find('button')
44
+
45
+ await button.trigger('click')
46
+ const popover = document.body.querySelector('.popover')
47
+ popover?.classList.add('show')
48
+
49
+ await button.trigger('click')
50
+ expect(document.body.querySelector('.popover')?.classList.contains('show')).toBe(false)
51
+ })
52
+
53
+ it('shows the popover on focus for the focus trigger', async () => {
54
+ const wrapper = renderWithDirective({ content: 'Body', trigger: 'focus' })
55
+ await wrapper.find('button').trigger('focus')
56
+ expect(document.body.querySelector('.popover')).not.toBeNull()
57
+ })
58
+
59
+ it('removes the popover element on unmount', async () => {
60
+ const wrapper = renderWithDirective({ content: 'Body', trigger: 'click' })
61
+ await wrapper.find('button').trigger('click')
62
+ expect(document.body.querySelector('.popover')).not.toBeNull()
63
+
64
+ wrapper.unmount()
65
+ expect(document.body.querySelector('.popover')).toBeNull()
66
+ })
67
+ })
@@ -0,0 +1,66 @@
1
+ import { mount } from '@vue/test-utils'
2
+ import { h, withDirectives } from 'vue'
3
+ import { createPopper } from '@popperjs/core'
4
+ import vCTooltip from '../v-c-tooltip'
5
+
6
+ jest.mock('@popperjs/core', () => ({ createPopper: jest.fn() }))
7
+
8
+ const mockedCreatePopper = createPopper as jest.Mock
9
+
10
+ const renderWithDirective = (value: unknown) =>
11
+ mount(
12
+ {
13
+ render: () => withDirectives(h('button', 'Trigger'), [[vCTooltip, value]]),
14
+ },
15
+ { attachTo: document.body }
16
+ )
17
+
18
+ describe('v-c-tooltip directive', () => {
19
+ afterEach(() => {
20
+ document.body.querySelectorAll('.tooltip').forEach((el) => el.remove())
21
+ mockedCreatePopper.mockClear()
22
+ })
23
+
24
+ it('creates a tooltip on hover with content', async () => {
25
+ const wrapper = renderWithDirective({ content: 'Hello', trigger: 'hover' })
26
+ await wrapper.find('button').trigger('mouseenter')
27
+
28
+ const tooltip = document.body.querySelector('.tooltip')
29
+ expect(tooltip).not.toBeNull()
30
+ expect(tooltip?.querySelector('.tooltip-inner')?.textContent).toBe('Hello')
31
+ expect(tooltip?.getAttribute('role')).toBe('tooltip')
32
+ expect(mockedCreatePopper).toHaveBeenCalled()
33
+ })
34
+
35
+ it('accepts a plain string value as content', async () => {
36
+ const wrapper = renderWithDirective('Just content')
37
+ await wrapper.find('button').trigger('mouseenter')
38
+ expect(document.body.querySelector('.tooltip-inner')?.textContent).toBe('Just content')
39
+ })
40
+
41
+ it('hides the tooltip on mouseleave', async () => {
42
+ const wrapper = renderWithDirective({ content: 'Hello', trigger: 'hover' })
43
+ const button = wrapper.find('button')
44
+
45
+ await button.trigger('mouseenter')
46
+ document.body.querySelector('.tooltip')?.classList.add('show')
47
+
48
+ await button.trigger('mouseleave')
49
+ expect(document.body.querySelector('.tooltip')?.classList.contains('show')).toBe(false)
50
+ })
51
+
52
+ it('shows the tooltip on click for the click trigger', async () => {
53
+ const wrapper = renderWithDirective({ content: 'Hello', trigger: 'click' })
54
+ await wrapper.find('button').trigger('click')
55
+ expect(document.body.querySelector('.tooltip')).not.toBeNull()
56
+ })
57
+
58
+ it('removes the tooltip element on unmount', async () => {
59
+ const wrapper = renderWithDirective({ content: 'Hello', trigger: 'click' })
60
+ await wrapper.find('button').trigger('click')
61
+ expect(document.body.querySelector('.tooltip')).not.toBeNull()
62
+
63
+ wrapper.unmount()
64
+ expect(document.body.querySelector('.tooltip')).toBeNull()
65
+ })
66
+ })
@@ -19,7 +19,7 @@ const addPopoverElement = (
19
19
  el: HTMLElement,
20
20
  popover: HTMLDivElement,
21
21
  popperOptions: Partial<Options>,
22
- uID: string,
22
+ uID: string
23
23
  ) => {
24
24
  el.setAttribute('aria-describedby', uID)
25
25
  document.body.appendChild(popover)
@@ -41,7 +41,7 @@ const togglePopoverElement = (
41
41
  el: HTMLElement,
42
42
  popover: HTMLDivElement,
43
43
  popperOptions: Partial<Options>,
44
- uID: string,
44
+ uID: string
45
45
  ) => {
46
46
  const popperElement = document.getElementById(popover.id)
47
47
  if (popperElement && popperElement.classList.contains('show')) {
@@ -57,7 +57,7 @@ export default {
57
57
  mounted(el: HTMLElement, binding: DirectiveBinding): void {
58
58
  const { getUID } = useUniqueId('popover')
59
59
  const value = binding.value
60
- const content = typeof value === 'string' ? value : value.content ?? ''
60
+ const content = typeof value === 'string' ? value : (value.content ?? '')
61
61
  const header = value.header ?? ''
62
62
  const trigger = value.trigger ?? 'click'
63
63
 
@@ -81,10 +81,11 @@ export default {
81
81
  binding.arg = uID
82
82
  const popover = createPopoverElement(uID, header, content)
83
83
 
84
- trigger.includes('click') &&
84
+ if (trigger.includes('click')) {
85
85
  el.addEventListener('click', () => {
86
86
  togglePopoverElement(el, popover, popperOptions, uID)
87
87
  })
88
+ }
88
89
 
89
90
  if (trigger.includes('focus')) {
90
91
  el.addEventListener('focus', () => {
@@ -106,6 +107,8 @@ export default {
106
107
  },
107
108
  unmounted(_el: HTMLElement, binding: DirectiveBinding): void {
108
109
  const popover = binding.arg && document.getElementById(binding.arg)
109
- popover && popover.remove()
110
+ if (popover) {
111
+ popover.remove()
112
+ }
110
113
  },
111
114
  }
@@ -18,7 +18,7 @@ const addTooltipElement = (
18
18
  el: HTMLElement,
19
19
  tooltip: HTMLDivElement,
20
20
  popperOptions: Partial<Options>,
21
- uID: string,
21
+ uID: string
22
22
  ) => {
23
23
  el.setAttribute('aria-describedby', uID)
24
24
  document.body.appendChild(tooltip)
@@ -40,7 +40,7 @@ const toggleTooltipElement = (
40
40
  el: HTMLElement,
41
41
  tooltip: HTMLDivElement,
42
42
  popperOptions: Partial<Options>,
43
- uID: string,
43
+ uID: string
44
44
  ) => {
45
45
  const popperElement = document.getElementById(tooltip.id)
46
46
  if (popperElement && popperElement.classList.contains('show')) {
@@ -55,7 +55,7 @@ export default {
55
55
  mounted(el: HTMLElement, binding: DirectiveBinding): void {
56
56
  const { getUID } = useUniqueId('tooltip')
57
57
  const value = binding.value
58
- const content = typeof value === 'string' ? value : value.content ?? ''
58
+ const content = typeof value === 'string' ? value : (value.content ?? '')
59
59
  const trigger = value.trigger ?? 'hover'
60
60
 
61
61
  // Popper Config
@@ -78,10 +78,11 @@ export default {
78
78
  binding.arg = uID
79
79
  const tooltip = createTooltipElement(uID, content)
80
80
 
81
- trigger.includes('click') &&
81
+ if (trigger.includes('click')) {
82
82
  el.addEventListener('click', () => {
83
83
  toggleTooltipElement(el, tooltip, popperOptions, uID)
84
84
  })
85
+ }
85
86
 
86
87
  if (trigger.includes('focus')) {
87
88
  el.addEventListener('focus', () => {
@@ -103,6 +104,8 @@ export default {
103
104
  },
104
105
  beforeUnmount(_el: HTMLElement, binding: DirectiveBinding): void {
105
106
  const tooltip = binding.arg && document.getElementById(binding.arg)
106
- tooltip && tooltip.remove()
107
+ if (tooltip) {
108
+ tooltip.remove()
109
+ }
107
110
  },
108
111
  }
@@ -18,7 +18,7 @@ export const vVisible: ObjectDirective<VShowElement> = {
18
18
  }
19
19
  },
20
20
  updated(el, { value, oldValue }, { transition }) {
21
- if (!value === !oldValue) return
21
+ if (Boolean(value) === Boolean(oldValue)) return
22
22
  if (transition) {
23
23
  if (value) {
24
24
  transition.beforeEnter(el)
package/src/index.ts CHANGED
@@ -12,7 +12,7 @@ const CoreuiVue = {
12
12
  for (const key in Directives) {
13
13
  app.directive(
14
14
  (Directives as { [key: string]: any })[key]['name'],
15
- (Directives as { [key: string]: any })[key],
15
+ (Directives as { [key: string]: any })[key]
16
16
  )
17
17
  }
18
18
  },
@@ -1,6 +1,7 @@
1
1
  import { DefineComponent, ExtractPropTypes, ExtractPublicPropTypes } from 'vue'
2
2
 
3
3
  export type ComponentProps<T> =
4
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
5
  T extends DefineComponent<ExtractPropTypes<infer Props>, any, any>
5
6
  ? ExtractPublicPropTypes<Props>
6
7
  : never
@@ -0,0 +1,82 @@
1
+ import Swipe from '../swipe'
2
+
3
+ const touchEvent = (type: string, clientX: number): Event => {
4
+ const event = new Event(type) as Event & { touches: { clientX: number }[] }
5
+ event.touches = [{ clientX }]
6
+ return event
7
+ }
8
+
9
+ describe('Swipe', () => {
10
+ let element: HTMLElement
11
+ const originalPointerEvent = window.PointerEvent
12
+
13
+ beforeEach(() => {
14
+ element = document.createElement('div')
15
+ document.body.appendChild(element)
16
+ // Force the touch-event path and make the helper consider touch supported.
17
+ ;(window as unknown as { PointerEvent?: unknown }).PointerEvent = undefined
18
+ Object.defineProperty(navigator, 'maxTouchPoints', { value: 1, configurable: true })
19
+ })
20
+
21
+ afterEach(() => {
22
+ element.remove()
23
+ ;(window as unknown as { PointerEvent?: unknown }).PointerEvent = originalPointerEvent
24
+ })
25
+
26
+ it('reports support when touch points are available', () => {
27
+ expect(Swipe.isSupported()).toBe(true)
28
+ })
29
+
30
+ it('calls onLeft when swiping left past the threshold', () => {
31
+ const onLeft = jest.fn()
32
+ const onRight = jest.fn()
33
+ const onEnd = jest.fn()
34
+ new Swipe(element, { onLeft, onRight, onEnd })
35
+
36
+ element.dispatchEvent(touchEvent('touchstart', 200))
37
+ element.dispatchEvent(touchEvent('touchmove', 100))
38
+ element.dispatchEvent(touchEvent('touchend', 100))
39
+
40
+ expect(onLeft).toHaveBeenCalledTimes(1)
41
+ expect(onRight).not.toHaveBeenCalled()
42
+ expect(onEnd).toHaveBeenCalledTimes(1)
43
+ })
44
+
45
+ it('calls onRight when swiping right past the threshold', () => {
46
+ const onLeft = jest.fn()
47
+ const onRight = jest.fn()
48
+ new Swipe(element, { onLeft, onRight })
49
+
50
+ element.dispatchEvent(touchEvent('touchstart', 100))
51
+ element.dispatchEvent(touchEvent('touchmove', 200))
52
+ element.dispatchEvent(touchEvent('touchend', 200))
53
+
54
+ expect(onRight).toHaveBeenCalledTimes(1)
55
+ expect(onLeft).not.toHaveBeenCalled()
56
+ })
57
+
58
+ it('ignores swipes below the threshold', () => {
59
+ const onLeft = jest.fn()
60
+ const onRight = jest.fn()
61
+ new Swipe(element, { onLeft, onRight })
62
+
63
+ element.dispatchEvent(touchEvent('touchstart', 200))
64
+ element.dispatchEvent(touchEvent('touchmove', 180))
65
+ element.dispatchEvent(touchEvent('touchend', 180))
66
+
67
+ expect(onLeft).not.toHaveBeenCalled()
68
+ expect(onRight).not.toHaveBeenCalled()
69
+ })
70
+
71
+ it('stops detecting swipes after dispose', () => {
72
+ const onLeft = jest.fn()
73
+ const swipe = new Swipe(element, { onLeft })
74
+ swipe.dispose()
75
+
76
+ element.dispatchEvent(touchEvent('touchstart', 200))
77
+ element.dispatchEvent(touchEvent('touchmove', 100))
78
+ element.dispatchEvent(touchEvent('touchend', 100))
79
+
80
+ expect(onLeft).not.toHaveBeenCalled()
81
+ })
82
+ })
@@ -2,7 +2,7 @@ const getNextActiveElement = (
2
2
  list: HTMLElement[],
3
3
  activeElement: HTMLElement,
4
4
  shouldGetNext: boolean,
5
- isCycleAllowed: boolean,
5
+ isCycleAllowed: boolean
6
6
  ) => {
7
7
  const listLength = list.length
8
8
  let index = list.indexOf(activeElement)
@@ -7,6 +7,7 @@ import isEqual from './isEqual'
7
7
  import isInViewport from './isInViewport'
8
8
  import isObjectInArray from './isObjectInArray'
9
9
  import isRTL from './isRTL'
10
+ import Swipe from './swipe'
10
11
 
11
12
  export {
12
13
  getNextActiveElement,
@@ -18,4 +19,5 @@ export {
18
19
  isInViewport,
19
20
  isObjectInArray,
20
21
  isRTL,
22
+ Swipe,
21
23
  }
@@ -0,0 +1,114 @@
1
+ const SWIPE_THRESHOLD = 40
2
+ const POINTER_TYPE_TOUCH = 'touch'
3
+ const POINTER_TYPE_PEN = 'pen'
4
+ const CLASS_NAME_POINTER_EVENT = 'pointer-event'
5
+
6
+ export interface SwipeCallbacks {
7
+ onLeft?: () => void
8
+ onRight?: () => void
9
+ onEnd?: () => void
10
+ }
11
+
12
+ /**
13
+ * Detects horizontal swipe gestures on an element, using Pointer events when
14
+ * available and falling back to Touch events otherwise. A modified port of the
15
+ * vanilla `@coreui/coreui` swipe helper.
16
+ */
17
+ class Swipe {
18
+ private readonly element: HTMLElement
19
+ private readonly callbacks: SwipeCallbacks
20
+ private deltaX = 0
21
+ private readonly supportPointerEvents = Boolean(window.PointerEvent)
22
+
23
+ constructor(element: HTMLElement, callbacks: SwipeCallbacks = {}) {
24
+ this.element = element
25
+ this.callbacks = callbacks
26
+
27
+ if (!element || !Swipe.isSupported()) {
28
+ return
29
+ }
30
+
31
+ this.initEvents()
32
+ }
33
+
34
+ static isSupported(): boolean {
35
+ return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0
36
+ }
37
+
38
+ dispose(): void {
39
+ this.element.removeEventListener('pointerdown', this.start)
40
+ this.element.removeEventListener('pointerup', this.end)
41
+ this.element.removeEventListener('touchstart', this.start)
42
+ this.element.removeEventListener('touchmove', this.move)
43
+ this.element.removeEventListener('touchend', this.end)
44
+ this.element.classList.remove(CLASS_NAME_POINTER_EVENT)
45
+ }
46
+
47
+ private readonly start = (event: PointerEvent | TouchEvent): void => {
48
+ if (!this.supportPointerEvents) {
49
+ this.deltaX = (event as TouchEvent).touches[0].clientX
50
+ return
51
+ }
52
+
53
+ if (this.eventIsPointerPenTouch(event as PointerEvent)) {
54
+ this.deltaX = (event as PointerEvent).clientX
55
+ }
56
+ }
57
+
58
+ private readonly move = (event: TouchEvent): void => {
59
+ this.deltaX =
60
+ event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.deltaX
61
+ }
62
+
63
+ private readonly end = (event: PointerEvent | TouchEvent): void => {
64
+ if (this.eventIsPointerPenTouch(event as PointerEvent)) {
65
+ this.deltaX = (event as PointerEvent).clientX - this.deltaX
66
+ }
67
+
68
+ this.handleSwipe()
69
+ this.callbacks.onEnd?.()
70
+ }
71
+
72
+ private handleSwipe(): void {
73
+ const absDeltaX = Math.abs(this.deltaX)
74
+
75
+ if (absDeltaX <= SWIPE_THRESHOLD) {
76
+ return
77
+ }
78
+
79
+ const direction = absDeltaX / this.deltaX
80
+
81
+ this.deltaX = 0
82
+
83
+ if (!direction) {
84
+ return
85
+ }
86
+
87
+ if (direction > 0) {
88
+ this.callbacks.onRight?.()
89
+ } else {
90
+ this.callbacks.onLeft?.()
91
+ }
92
+ }
93
+
94
+ private eventIsPointerPenTouch(event: PointerEvent): boolean {
95
+ return (
96
+ this.supportPointerEvents &&
97
+ (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)
98
+ )
99
+ }
100
+
101
+ private initEvents(): void {
102
+ if (this.supportPointerEvents) {
103
+ this.element.addEventListener('pointerdown', this.start)
104
+ this.element.addEventListener('pointerup', this.end)
105
+ this.element.classList.add(CLASS_NAME_POINTER_EVENT)
106
+ } else {
107
+ this.element.addEventListener('touchstart', this.start)
108
+ this.element.addEventListener('touchmove', this.move)
109
+ this.element.addEventListener('touchend', this.end)
110
+ }
111
+ }
112
+ }
113
+
114
+ export default Swipe
@@ -7,7 +7,7 @@ const execute = (callback: () => void) => {
7
7
  export const executeAfterTransition = (
8
8
  callback: () => void,
9
9
  transitionElement: HTMLElement,
10
- waitForTransition = true,
10
+ waitForTransition = true
11
11
  ) => {
12
12
  if (!waitForTransition) {
13
13
  execute(callback)
@@ -19,7 +19,7 @@ export const executeAfterTransition = (
19
19
 
20
20
  let called = false
21
21
 
22
- const handler = ({ target }: { target: any }) => {
22
+ const handler = ({ target }: Event) => {
23
23
  if (target !== transitionElement) {
24
24
  return
25
25
  }
@@ -1,28 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { CAccordionCollapse as Component } from '../../../index'
3
-
4
- const ComponentName = 'CAccordionCollapse'
5
-
6
- const defaultWrapper = mount(Component, {
7
- propsData: {
8
- visible: true,
9
- },
10
- slots: {
11
- default: 'Default slot',
12
- },
13
- })
14
-
15
- describe(`Loads and display ${ComponentName} component`, () => {
16
- it('has a name', () => {
17
- expect(Component.name).toMatch(ComponentName)
18
- })
19
- it('renders correctly', () => {
20
- expect(defaultWrapper.html()).toMatchSnapshot()
21
- })
22
- it('contain slots and classes', () => {
23
- expect(defaultWrapper.text()).toContain('Default slot')
24
- expect(defaultWrapper.classes('accordion-collapse')).toBe(true)
25
- expect(defaultWrapper.find('div').classes('collapse')).toBe(true)
26
- expect(defaultWrapper.find('div').classes('show')).toBe(true)
27
- })
28
- })
@@ -1,7 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`Loads and display CAccordionCollapse component renders correctly 1`] = `
4
- "<transition-stub class=\\"accordion-collapse\\">
5
- <div class=\\"collapse show\\">Default slot</div>
6
- </transition-stub>"
7
- `;
@@ -1,44 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { CCollapse as Component } from '../../../index'
3
-
4
- const ComponentName = 'CCollapse'
5
-
6
- const defaultWrapper = mount(Component, {
7
- propsData: {},
8
- slots: {
9
- default: 'Default slot',
10
- },
11
- })
12
-
13
- const customWrapper = mount(Component, {
14
- propsData: {
15
- visible: true,
16
- },
17
- slots: {
18
- default: 'Default slot',
19
- },
20
- })
21
-
22
- describe(`Loads and display ${ComponentName} component`, () => {
23
- it('has a name', () => {
24
- expect(Component.name).toMatch(ComponentName)
25
- })
26
- it('renders correctly', () => {
27
- expect(defaultWrapper.html()).toMatchSnapshot()
28
- })
29
- it('contain slots and classes', () => {
30
- expect(defaultWrapper.text()).toContain('Default slot')
31
- expect(defaultWrapper.find('div').classes('collapse')).toBe(true)
32
- })
33
- })
34
-
35
- describe(`Loads and display ${ComponentName} component`, () => {
36
- it('renders correctly', () => {
37
- expect(customWrapper.html()).toMatchSnapshot()
38
- })
39
- it('contain slots and classes', () => {
40
- expect(customWrapper.text()).toContain('Default slot')
41
- expect(customWrapper.find('div').classes('collapse')).toBe(true)
42
- expect(customWrapper.find('div').classes('show')).toBe(true)
43
- })
44
- })
@@ -1,13 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`Loads and display CCollapse component renders correctly 1`] = `
4
- "<transition-stub appear="false" persisted="false" css="false">
5
- <div class="collapse">Default slot</div>
6
- </transition-stub>"
7
- `;
8
-
9
- exports[`Loads and display CCollapse component renders correctly 2`] = `
10
- "<transition-stub appear="false" persisted="false" css="false">
11
- <div class="collapse show">Default slot</div>
12
- </transition-stub>"
13
- `;