@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
@@ -14,6 +14,14 @@ const CMultiSelectOptions = defineComponent({
14
14
  type: Array as PropType<(Option | OptionsGroup)[]>,
15
15
  default: () => [],
16
16
  },
17
+ optionsGroupsSelectable: Boolean,
18
+ optionsGroupsStyle: {
19
+ type: String,
20
+ default: 'checkbox',
21
+ validator: (value: string) => {
22
+ return ['checkbox', 'text'].includes(value)
23
+ },
24
+ },
17
25
  optionsMaxHeight: {
18
26
  type: [Number, String],
19
27
  default: 'auto',
@@ -40,7 +48,7 @@ const CMultiSelectOptions = defineComponent({
40
48
  default: 10,
41
49
  },
42
50
  },
43
- emits: ['optionClick'],
51
+ emits: ['groupClick', 'optionClick'],
44
52
  setup(props, { emit }) {
45
53
  const handleKeyDown = (event: KeyboardEvent, option: Option) => {
46
54
  if (event.code === 'Space' || event.key === 'Enter') {
@@ -66,10 +74,49 @@ const CMultiSelectOptions = defineComponent({
66
74
  }
67
75
  }
68
76
 
77
+ const handleGroupKeyDown = (event: KeyboardEvent, group: OptionsGroup) => {
78
+ if (event.code === 'Space' || event.key === 'Enter') {
79
+ event.preventDefault()
80
+ emit('groupClick', group)
81
+ return
82
+ }
83
+
84
+ if (event.key === 'Down' || event.key === 'ArrowDown') {
85
+ event.preventDefault()
86
+ const next = getNextSibling(event.target as HTMLElement, '.form-multi-select-option')
87
+
88
+ next && (next as HTMLElement).focus()
89
+ }
90
+
91
+ if (event.key === 'Up' || event.key === 'ArrowUp') {
92
+ event.preventDefault()
93
+ const prev = getPreviousSibling(event.target as HTMLElement, '.form-multi-select-option')
94
+
95
+ prev && (prev as HTMLElement).focus()
96
+ }
97
+ }
98
+
99
+ const getGroupCheckboxState = (group: OptionsGroup) => {
100
+ const groupOptions = (group.options ?? []).filter((option) => !option.disabled)
101
+ const selectedCount = groupOptions.filter((option) =>
102
+ props.selected.some((_option) => _option.value === option.value),
103
+ ).length
104
+
105
+ if (groupOptions.length > 0 && selectedCount >= groupOptions.length) {
106
+ return 'all'
107
+ }
108
+
109
+ return selectedCount === 0 ? 'none' : 'indeterminate'
110
+ }
111
+
69
112
  const handleOptionClick = (option: Option) => {
70
113
  emit('optionClick', option as Option)
71
114
  }
72
115
 
116
+ const handleGroupClick = (group: OptionsGroup) => {
117
+ emit('groupClick', group as OptionsGroup)
118
+ }
119
+
73
120
  // TODO: find solution how to remove any
74
121
  const createOptions = (options: (Option | OptionsGroup)[]): VNode | VNode[] | any =>
75
122
  options.length > 0
@@ -103,14 +150,41 @@ const CMultiSelectOptions = defineComponent({
103
150
  : [
104
151
  h(
105
152
  'div',
106
- { class: 'form-multi-select-optgroup-label' },
153
+ {
154
+ class: [
155
+ 'form-multi-select-optgroup-label',
156
+ {
157
+ 'form-multi-select-optgroup-label-with-checkbox':
158
+ props.optionsGroupsSelectable && props.optionsGroupsStyle === 'checkbox',
159
+ 'form-multi-selected':
160
+ props.optionsGroupsSelectable &&
161
+ props.optionsGroupsStyle === 'checkbox' &&
162
+ getGroupCheckboxState(option) === 'all',
163
+ 'form-multi-select-indeterminate':
164
+ props.optionsGroupsSelectable &&
165
+ props.optionsGroupsStyle === 'checkbox' &&
166
+ getGroupCheckboxState(option) === 'indeterminate',
167
+ },
168
+ ],
169
+ ...(props.optionsGroupsSelectable &&
170
+ props.optionsGroupsStyle === 'checkbox' && {
171
+ onClick: () => handleGroupClick(option as OptionsGroup),
172
+ onKeydown: (event: any) => handleGroupKeyDown(event, option as OptionsGroup),
173
+ tabindex: 0,
174
+ role: 'button',
175
+ }),
176
+ },
107
177
  props.scopedSlots && props.scopedSlots['options-groups']
108
178
  ? h(props.scopedSlots['options-groups'], { option: option })
109
179
  : option.label,
110
180
  ),
111
181
  ],
112
182
  )
113
- : h('div', { class: 'form-multi-select-options-empty' }, props.searchNoResultsLabel)
183
+ : h(
184
+ 'div',
185
+ { class: 'form-multi-select-options-empty', role: 'status' },
186
+ props.searchNoResultsLabel,
187
+ )
114
188
 
115
189
  return () => [
116
190
  props.virtualScroller
@@ -5,6 +5,10 @@ import type { Option, Search } from './types'
5
5
  const CMultiSelectSelection = defineComponent({
6
6
  name: 'CMultiSelectSelection',
7
7
  props: {
8
+ ariaTagDeleteLabel: {
9
+ type: String,
10
+ default: 'Remove',
11
+ },
8
12
  disabled: Boolean,
9
13
  multiple: {
10
14
  type: Boolean,
@@ -70,6 +74,7 @@ const CMultiSelectSelection = defineComponent({
70
74
  'form-multi-select-selection-tags': props.multiple && props.selectionType === 'tags',
71
75
  },
72
76
  ],
77
+ 'aria-live': 'polite',
73
78
  },
74
79
  [
75
80
  props.multiple &&
@@ -93,7 +98,7 @@ const CMultiSelectSelection = defineComponent({
93
98
  h('button', {
94
99
  class: 'form-multi-select-tag-delete',
95
100
  type: 'button',
96
- ariaLabel: 'Close',
101
+ ariaLabel: `${props.ariaTagDeleteLabel} ${option.label}`.trim(),
97
102
  onClick: () => handleRemove(option),
98
103
  }),
99
104
  ])
@@ -29,7 +29,14 @@ const CNav = defineComponent({
29
29
  variant: {
30
30
  type: String,
31
31
  validator: (value: string) => {
32
- return ['enclosed', 'enclosed-pills', 'pills', 'tabs', 'underline', 'underline-border'].includes(value)
32
+ return [
33
+ 'enclosed',
34
+ 'enclosed-pills',
35
+ 'pills',
36
+ 'tabs',
37
+ 'underline',
38
+ 'underline-border',
39
+ ].includes(value)
33
40
  },
34
41
  },
35
42
  },
@@ -48,7 +55,7 @@ const CNav = defineComponent({
48
55
  ],
49
56
  role: 'navigation',
50
57
  },
51
- slots.default && slots.default(),
58
+ slots.default && slots.default()
52
59
  )
53
60
  },
54
61
  })
@@ -1,4 +1,15 @@
1
- import { defineComponent, h, onMounted, ref, RendererElement, Transition, watch } from 'vue'
1
+ import {
2
+ computed,
3
+ defineComponent,
4
+ getCurrentInstance,
5
+ h,
6
+ inject,
7
+ provide,
8
+ Ref,
9
+ ref,
10
+ useId,
11
+ watch,
12
+ } from 'vue'
2
13
 
3
14
  import { executeAfterTransition } from '../../utils/transition'
4
15
 
@@ -17,149 +28,186 @@ const CNavGroup = defineComponent({
17
28
  */
18
29
  compact: Boolean,
19
30
  /**
20
- * Show nav group items.
31
+ * Show nav group items. Acts as the initial state on its own, or as the controlled value
32
+ * when paired with a `v-model:visible` / `@update:visible` listener.
21
33
  */
22
- visible: Boolean,
34
+ visible: {
35
+ type: Boolean,
36
+ default: undefined,
37
+ },
23
38
  },
24
- emits: ['visible-change'],
39
+ emits: ['update:visible', 'visible-change'],
25
40
  setup(props, { slots, emit }) {
26
- const visible = ref()
27
- const navGroupRef = ref()
28
- const visibleGroup = ref()
41
+ const key = useId()
42
+ const instance = getCurrentInstance()
43
+ const hasUpdateListener = Boolean(instance?.vnode.props?.['onUpdate:visible'])
29
44
 
30
- const handleVisibleChange = (visible: boolean, index: number) => {
31
- if (visible) {
32
- visibleGroup.value = index
33
- } else {
34
- if (visibleGroup.value === index) {
35
- visibleGroup.value = 0
36
- }
37
- }
38
- }
45
+ const navGroupItemsRef = ref<HTMLElement>()
39
46
 
40
- const isVisible = (index: number) => Boolean(visibleGroup.value === index)
47
+ const parentActiveKey = inject<Ref<string | undefined> | undefined>(
48
+ 'cNavGroupActiveKey',
49
+ undefined
50
+ )
51
+ const parentSetActiveKey = inject<((key?: string) => void) | undefined>(
52
+ 'cNavGroupSetActiveKey',
53
+ undefined
54
+ )
55
+ const parentOpenBranch = inject<(() => void) | undefined>('cNavGroupOpenBranch', undefined)
56
+
57
+ const controlled = computed(() => props.visible !== undefined && hasUpdateListener)
58
+
59
+ const internal = ref(Boolean(props.visible))
60
+
61
+ const visible = computed(() => {
62
+ if (controlled.value) {
63
+ return props.visible as boolean
64
+ }
41
65
 
42
- onMounted(() => {
43
- visible.value = props.visible
44
- if (props.visible) {
45
- navGroupRef.value.classList.add('show')
66
+ if (parentActiveKey) {
67
+ return parentActiveKey.value === key
46
68
  }
47
69
 
48
- emit('visible-change', visible.value)
70
+ return internal.value
49
71
  })
50
72
 
73
+ const activeGroupKey = ref<string>()
74
+ provide('cNavGroupActiveKey', activeGroupKey)
75
+ provide('cNavGroupSetActiveKey', (value?: string) => {
76
+ activeGroupKey.value = value
77
+ })
78
+
79
+ const openBranch = () => {
80
+ parentSetActiveKey?.(key)
81
+ parentOpenBranch?.()
82
+ }
83
+ provide('cNavGroupOpenBranch', openBranch)
84
+
85
+ // Seed the accordion / local state from the `visible` prop: opens default-open groups and
86
+ // follows later changes (and keeps controlled groups in sync). Watching `props.visible`
87
+ // keeps this from re-running on accordion changes, so a default-open group can be collapsed
88
+ // manually.
51
89
  watch(
52
90
  () => props.visible,
53
- () => {
54
- visible.value = props.visible
91
+ (value) => {
92
+ if (value === undefined) {
93
+ return
94
+ }
55
95
 
56
- if (visible.value === false) {
57
- visibleGroup.value = undefined
96
+ if (parentSetActiveKey) {
97
+ if (value) {
98
+ parentSetActiveKey(key)
99
+ } else if (parentActiveKey && parentActiveKey.value === key) {
100
+ parentSetActiveKey(undefined)
101
+ }
102
+ } else {
103
+ internal.value = value
58
104
  }
59
105
  },
106
+ { immediate: true }
60
107
  )
61
108
 
62
- watch(visible, () => {
63
- emit('visible-change', visible.value)
64
- })
109
+ // Accordion: when another branch opens, a controlled group must close too. As its
110
+ // visibility is owned by the parent, request the change through `update:visible`.
111
+ watch(
112
+ () => parentActiveKey?.value,
113
+ (activeKey) => {
114
+ if (!controlled.value || !props.visible) {
115
+ return
116
+ }
65
117
 
66
- const handleTogglerClick = (event: Event) => {
67
- event.preventDefault()
68
- visible.value = !visible.value
69
- emit('visible-change', visible.value)
70
- }
118
+ if (activeKey !== undefined && activeKey !== key) {
119
+ emit('update:visible', false)
120
+ }
121
+ }
122
+ )
71
123
 
72
- const handleBeforeEnter = (el: RendererElement) => {
73
- el.style.height = '0px'
74
- navGroupRef.value.classList.add('show')
75
- }
124
+ // Animate the height of the always-mounted items, after the `show` class (driven straight
125
+ // from `visible`, so the toggler indicator reacts immediately). `display` is forced while
126
+ // collapsing to override the `.nav-group:not(.show) .nav-group-items { display: none }` rule.
127
+ watch(
128
+ visible,
129
+ (value) => {
130
+ emit('visible-change', value)
76
131
 
77
- // eslint-disable-next-line unicorn/consistent-function-scoping
78
- const handleEnter = (el: RendererElement, done: () => void) => {
79
- executeAfterTransition(() => done(), el as HTMLElement)
80
- el.style.height = `${el.scrollHeight}px`
81
- }
132
+ const el = navGroupItemsRef.value
133
+ if (!el) {
134
+ return
135
+ }
82
136
 
83
- // eslint-disable-next-line unicorn/consistent-function-scoping
84
- const handleAfterEnter = (el: RendererElement) => {
85
- el.style.height = 'auto'
86
- }
137
+ el.style.display = 'block'
138
+
139
+ // Each branch sets the starting height, forces a reflow by reading `offsetHeight`, then
140
+ // sets the target height. The reflow makes the browser commit the starting value, so the
141
+ // CSS height transition runs instead of both writes collapsing into a single frame.
142
+ if (value) {
143
+ el.style.height = '0px'
144
+ el.offsetHeight // eslint-disable-line @typescript-eslint/no-unused-expressions
145
+ el.style.height = `${el.scrollHeight}px`
146
+ executeAfterTransition(() => {
147
+ el.style.height = 'auto'
148
+ }, el)
149
+ } else {
150
+ el.style.height = `${el.scrollHeight}px`
151
+ el.offsetHeight // eslint-disable-line @typescript-eslint/no-unused-expressions
152
+ el.style.height = '0px'
153
+ executeAfterTransition(() => {
154
+ el.style.display = ''
155
+ el.style.height = ''
156
+ }, el)
157
+ }
158
+ },
159
+ { flush: 'post' }
160
+ )
87
161
 
88
- // eslint-disable-next-line unicorn/consistent-function-scoping
89
- const handleBeforeLeave = (el: RendererElement) => {
90
- el.style.height = `${el.scrollHeight}px`
91
- }
162
+ const handleTogglerClick = (event: Event) => {
163
+ event.preventDefault()
92
164
 
93
- // eslint-disable-next-line unicorn/consistent-function-scoping
94
- const handleLeave = (el: RendererElement, done: () => void) => {
95
- executeAfterTransition(() => done(), el as HTMLElement)
96
- setTimeout(() => {
97
- el.style.height = '0px'
98
- }, 1)
99
- }
165
+ const next = !visible.value
166
+ emit('update:visible', next)
167
+
168
+ if (controlled.value) {
169
+ return
170
+ }
100
171
 
101
- const handleAfterLeave = () => {
102
- navGroupRef.value.classList.remove('show')
172
+ if (parentSetActiveKey) {
173
+ parentSetActiveKey(next ? key : undefined)
174
+ } else {
175
+ internal.value = next
176
+ }
103
177
  }
104
178
 
105
179
  return () =>
106
180
  h(
107
181
  props.as,
108
182
  {
109
- class: 'nav-group',
110
- ref: navGroupRef,
183
+ class: ['nav-group', { show: visible.value }],
111
184
  },
112
185
  [
113
186
  slots.togglerContent &&
114
187
  h(
115
188
  'a',
116
189
  {
190
+ 'aria-expanded': visible.value,
117
191
  class: ['nav-link', 'nav-group-toggle'],
118
192
  href: '#',
119
193
  onClick: handleTogglerClick,
120
194
  },
121
- slots.togglerContent && slots.togglerContent(),
195
+ slots.togglerContent && slots.togglerContent({ visible: visible.value })
122
196
  ),
123
197
  h(
124
- Transition,
125
- {
126
- css: false,
127
- onBeforeEnter: (el) => handleBeforeEnter(el),
128
- onEnter: (el, done) => handleEnter(el, done),
129
- onAfterEnter: (el) => handleAfterEnter(el),
130
- onBeforeLeave: (el) => handleBeforeLeave(el),
131
- onLeave: (el, done) => handleLeave(el, done),
132
- onAfterLeave: () => handleAfterLeave(),
133
- },
198
+ props.as === 'div' ? 'div' : 'ul',
134
199
  {
135
- default: () =>
136
- visible.value &&
137
- h(
138
- props.as === 'div' ? 'div' : 'ul',
139
- {
140
- class: [
141
- 'nav-group-items',
142
- {
143
- compact: props.compact,
144
- },
145
- ],
146
- },
147
- slots.default &&
148
- slots.default().map((vnode, index) => {
149
- // @ts-expect-error name is defined in component
150
- if (vnode.type.name === 'CNavGroup') {
151
- return h(vnode, {
152
- onVisibleChange: (visible: boolean) =>
153
- handleVisibleChange(visible, index + 1),
154
- ...(visibleGroup.value && { visible: isVisible(index + 1) }),
155
- })
156
- }
157
- return vnode
158
- }),
159
- ),
200
+ class: [
201
+ 'nav-group-items',
202
+ {
203
+ compact: props.compact,
204
+ },
205
+ ],
206
+ ref: navGroupItemsRef,
160
207
  },
208
+ slots.default && slots.default()
161
209
  ),
162
- ],
210
+ ]
163
211
  )
164
212
  },
165
213
  })
@@ -54,9 +54,9 @@ const CNavItem = defineComponent({
54
54
  },
55
55
  {
56
56
  default: () => slots.default && slots.default(),
57
- },
57
+ }
58
58
  )
59
- : slots.default && slots.default(),
59
+ : slots.default && slots.default()
60
60
  )
61
61
  },
62
62
  })
@@ -1,4 +1,4 @@
1
- import { defineComponent, h } from 'vue'
1
+ import { defineComponent, h, inject, onMounted, watch } from 'vue'
2
2
 
3
3
  import { CLink } from '../link/CLink'
4
4
 
@@ -26,6 +26,23 @@ const CNavLink = defineComponent({
26
26
  href: String,
27
27
  },
28
28
  setup(props, { slots }) {
29
+ const openBranch = inject<(() => void) | undefined>('cNavGroupOpenBranch', undefined)
30
+
31
+ onMounted(() => {
32
+ if (props.active && openBranch) {
33
+ openBranch()
34
+ }
35
+ })
36
+
37
+ watch(
38
+ () => props.active,
39
+ (active, previous) => {
40
+ if (active && !previous && openBranch) {
41
+ openBranch()
42
+ }
43
+ }
44
+ )
45
+
29
46
  return () =>
30
47
  h(
31
48
  CLink,
@@ -38,7 +55,7 @@ const CNavLink = defineComponent({
38
55
  },
39
56
  {
40
57
  default: () => slots.default && slots.default(),
41
- },
58
+ }
42
59
  )
43
60
  },
44
61
  })