quasar 2.15.1 → 2.15.3

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 (795) hide show
  1. package/dist/api/AddressbarColor.json +1 -1
  2. package/dist/api/AppFullscreen.json +1 -1
  3. package/dist/api/BottomSheet.json +1 -1
  4. package/dist/api/ClosePopup.json +1 -1
  5. package/dist/api/Cookies.json +1 -1
  6. package/dist/api/Dark.json +1 -1
  7. package/dist/api/Dialog.json +1 -1
  8. package/dist/api/IconSet.json +1 -0
  9. package/dist/api/Intersection.json +1 -1
  10. package/dist/api/Lang.json +1 -1
  11. package/dist/api/Loading.json +1 -1
  12. package/dist/api/LoadingBar.json +1 -1
  13. package/dist/api/LocalStorage.json +1 -1
  14. package/dist/api/Morph.json +1 -1
  15. package/dist/api/Mutation.json +1 -1
  16. package/dist/api/Notify.json +1 -1
  17. package/dist/api/Platform.json +1 -1
  18. package/dist/api/QAjaxBar.json +1 -1
  19. package/dist/api/QAvatar.json +1 -1
  20. package/dist/api/QBadge.json +1 -1
  21. package/dist/api/QBanner.json +1 -1
  22. package/dist/api/QBar.json +1 -1
  23. package/dist/api/QBreadcrumbs.json +1 -1
  24. package/dist/api/QBreadcrumbsEl.json +1 -1
  25. package/dist/api/QBtn.json +1 -1
  26. package/dist/api/QBtnDropdown.json +1 -1
  27. package/dist/api/QBtnToggle.json +1 -1
  28. package/dist/api/QCard.json +1 -1
  29. package/dist/api/QCardActions.json +1 -1
  30. package/dist/api/QCardSection.json +1 -1
  31. package/dist/api/QCarousel.json +1 -1
  32. package/dist/api/QCarouselControl.json +1 -1
  33. package/dist/api/QCarouselSlide.json +1 -1
  34. package/dist/api/QChatMessage.json +1 -1
  35. package/dist/api/QCheckbox.json +1 -1
  36. package/dist/api/QChip.json +1 -1
  37. package/dist/api/QCircularProgress.json +1 -1
  38. package/dist/api/QColor.json +1 -1
  39. package/dist/api/QDate.json +1 -1
  40. package/dist/api/QDialog.json +1 -1
  41. package/dist/api/QDrawer.json +1 -1
  42. package/dist/api/QEditor.json +1 -1
  43. package/dist/api/QExpansionItem.json +1 -1
  44. package/dist/api/QFab.json +1 -1
  45. package/dist/api/QFabAction.json +1 -1
  46. package/dist/api/QField.json +1 -1
  47. package/dist/api/QFile.json +1 -1
  48. package/dist/api/QFooter.json +1 -1
  49. package/dist/api/QForm.json +1 -1
  50. package/dist/api/QFormChildMixin.json +1 -1
  51. package/dist/api/QHeader.json +1 -1
  52. package/dist/api/QIcon.json +1 -1
  53. package/dist/api/QImg.json +1 -1
  54. package/dist/api/QInfiniteScroll.json +1 -1
  55. package/dist/api/QInnerLoading.json +1 -1
  56. package/dist/api/QInput.json +1 -1
  57. package/dist/api/QIntersection.json +1 -1
  58. package/dist/api/QItem.json +1 -1
  59. package/dist/api/QKnob.json +1 -1
  60. package/dist/api/QLayout.json +1 -1
  61. package/dist/api/QLinearProgress.json +1 -1
  62. package/dist/api/QList.json +1 -1
  63. package/dist/api/QMarkupTable.json +1 -1
  64. package/dist/api/QMenu.json +1 -1
  65. package/dist/api/QNoSsr.json +1 -1
  66. package/dist/api/QOptionGroup.json +1 -1
  67. package/dist/api/QPage.json +1 -1
  68. package/dist/api/QPageScroller.json +1 -1
  69. package/dist/api/QPageSticky.json +1 -1
  70. package/dist/api/QPagination.json +1 -1
  71. package/dist/api/QParallax.json +1 -1
  72. package/dist/api/QPopupEdit.json +1 -1
  73. package/dist/api/QPopupProxy.json +1 -1
  74. package/dist/api/QPullToRefresh.json +1 -1
  75. package/dist/api/QRadio.json +1 -1
  76. package/dist/api/QRange.json +1 -1
  77. package/dist/api/QRating.json +1 -1
  78. package/dist/api/QResizeObserver.json +1 -1
  79. package/dist/api/QResponsive.json +1 -1
  80. package/dist/api/QRouteTab.json +1 -1
  81. package/dist/api/QScrollArea.json +1 -1
  82. package/dist/api/QScrollObserver.json +1 -1
  83. package/dist/api/QSelect.json +1 -1
  84. package/dist/api/QSeparator.json +1 -1
  85. package/dist/api/QSkeleton.json +1 -1
  86. package/dist/api/QSlideItem.json +1 -1
  87. package/dist/api/QSlideTransition.json +1 -1
  88. package/dist/api/QSlider.json +1 -1
  89. package/dist/api/QSpinner.json +1 -1
  90. package/dist/api/QSpinnerAudio.json +1 -1
  91. package/dist/api/QSpinnerBall.json +1 -1
  92. package/dist/api/QSpinnerBars.json +1 -1
  93. package/dist/api/QSpinnerBox.json +1 -1
  94. package/dist/api/QSpinnerClock.json +1 -1
  95. package/dist/api/QSpinnerComment.json +1 -1
  96. package/dist/api/QSpinnerCube.json +1 -1
  97. package/dist/api/QSpinnerDots.json +1 -1
  98. package/dist/api/QSpinnerFacebook.json +1 -1
  99. package/dist/api/QSpinnerGears.json +1 -1
  100. package/dist/api/QSpinnerGrid.json +1 -1
  101. package/dist/api/QSpinnerHearts.json +1 -1
  102. package/dist/api/QSpinnerHourglass.json +1 -1
  103. package/dist/api/QSpinnerInfinity.json +1 -1
  104. package/dist/api/QSpinnerIos.json +1 -1
  105. package/dist/api/QSpinnerOrbit.json +1 -1
  106. package/dist/api/QSpinnerOval.json +1 -1
  107. package/dist/api/QSpinnerPie.json +1 -1
  108. package/dist/api/QSpinnerPuff.json +1 -1
  109. package/dist/api/QSpinnerRadio.json +1 -1
  110. package/dist/api/QSpinnerRings.json +1 -1
  111. package/dist/api/QSpinnerTail.json +1 -1
  112. package/dist/api/QSplitter.json +1 -1
  113. package/dist/api/QStep.json +1 -1
  114. package/dist/api/QStepper.json +1 -1
  115. package/dist/api/QTab.json +1 -1
  116. package/dist/api/QTabPanel.json +1 -1
  117. package/dist/api/QTabPanels.json +1 -1
  118. package/dist/api/QTable.json +1 -1
  119. package/dist/api/QTabs.json +1 -1
  120. package/dist/api/QTd.json +1 -1
  121. package/dist/api/QTh.json +1 -1
  122. package/dist/api/QTime.json +1 -1
  123. package/dist/api/QTimeline.json +1 -1
  124. package/dist/api/QTimelineEntry.json +1 -1
  125. package/dist/api/QToggle.json +1 -1
  126. package/dist/api/QTooltip.json +1 -1
  127. package/dist/api/QTr.json +1 -1
  128. package/dist/api/QTree.json +1 -1
  129. package/dist/api/QUploader.json +1 -1
  130. package/dist/api/QVideo.json +1 -1
  131. package/dist/api/QVirtualScroll.json +1 -1
  132. package/dist/api/Ripple.json +1 -1
  133. package/dist/api/Screen.json +1 -1
  134. package/dist/api/Scroll.json +1 -1
  135. package/dist/api/ScrollFire.json +1 -1
  136. package/dist/api/SessionStorage.json +1 -1
  137. package/dist/api/TouchHold.json +1 -1
  138. package/dist/api/TouchPan.json +1 -1
  139. package/dist/api/TouchRepeat.json +1 -1
  140. package/dist/api/TouchSwipe.json +1 -1
  141. package/dist/icon-set/bootstrap-icons.umd.prod.js +2 -2
  142. package/dist/icon-set/eva-icons.umd.prod.js +2 -2
  143. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +2 -2
  144. package/dist/icon-set/fontawesome-v5.umd.prod.js +2 -2
  145. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +2 -2
  146. package/dist/icon-set/fontawesome-v6.umd.prod.js +2 -2
  147. package/dist/icon-set/ionicons-v4.umd.prod.js +2 -2
  148. package/dist/icon-set/line-awesome.umd.prod.js +2 -2
  149. package/dist/icon-set/material-icons-outlined.umd.prod.js +2 -2
  150. package/dist/icon-set/material-icons-round.umd.prod.js +2 -2
  151. package/dist/icon-set/material-icons-sharp.umd.prod.js +2 -2
  152. package/dist/icon-set/material-icons.umd.prod.js +2 -2
  153. package/dist/icon-set/material-symbols-outlined.umd.prod.js +2 -2
  154. package/dist/icon-set/material-symbols-rounded.umd.prod.js +2 -2
  155. package/dist/icon-set/material-symbols-sharp.umd.prod.js +2 -2
  156. package/dist/icon-set/mdi-v3.umd.prod.js +2 -2
  157. package/dist/icon-set/mdi-v4.umd.prod.js +2 -2
  158. package/dist/icon-set/mdi-v5.umd.prod.js +2 -2
  159. package/dist/icon-set/mdi-v6.umd.prod.js +2 -2
  160. package/dist/icon-set/mdi-v7.umd.prod.js +2 -2
  161. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +2 -2
  162. package/dist/icon-set/svg-eva-icons.umd.prod.js +2 -2
  163. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +2 -2
  164. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +2 -2
  165. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +2 -2
  166. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +2 -2
  167. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +2 -2
  168. package/dist/icon-set/svg-line-awesome.umd.prod.js +2 -2
  169. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +2 -2
  170. package/dist/icon-set/svg-material-icons-round.umd.prod.js +2 -2
  171. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +2 -2
  172. package/dist/icon-set/svg-material-icons.umd.prod.js +2 -2
  173. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +2 -2
  174. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +2 -2
  175. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +2 -2
  176. package/dist/icon-set/svg-mdi-v6.umd.prod.js +2 -2
  177. package/dist/icon-set/svg-mdi-v7.umd.prod.js +2 -2
  178. package/dist/icon-set/svg-themify.umd.prod.js +2 -2
  179. package/dist/icon-set/themify.umd.prod.js +2 -2
  180. package/dist/lang/ar-TN.umd.prod.js +2 -2
  181. package/dist/lang/ar.umd.prod.js +2 -2
  182. package/dist/lang/az-Latn.umd.prod.js +2 -2
  183. package/dist/lang/bg.umd.prod.js +2 -2
  184. package/dist/lang/bn.umd.prod.js +2 -2
  185. package/dist/lang/ca.umd.prod.js +2 -2
  186. package/dist/lang/cs.umd.prod.js +2 -2
  187. package/dist/lang/da.umd.prod.js +2 -2
  188. package/dist/lang/de-CH.umd.prod.js +2 -2
  189. package/dist/lang/de-DE.umd.prod.js +2 -2
  190. package/dist/lang/de.umd.prod.js +2 -2
  191. package/dist/lang/el.umd.prod.js +2 -2
  192. package/dist/lang/en-GB.umd.prod.js +2 -2
  193. package/dist/lang/en-US.umd.prod.js +2 -2
  194. package/dist/lang/eo.umd.prod.js +2 -2
  195. package/dist/lang/es.umd.prod.js +2 -2
  196. package/dist/lang/et.umd.prod.js +2 -2
  197. package/dist/lang/eu.umd.prod.js +2 -2
  198. package/dist/lang/fa-IR.umd.prod.js +2 -2
  199. package/dist/lang/fa.umd.prod.js +2 -2
  200. package/dist/lang/fi.umd.prod.js +2 -2
  201. package/dist/lang/fr.umd.prod.js +2 -2
  202. package/dist/lang/gn.umd.prod.js +2 -2
  203. package/dist/lang/he.umd.prod.js +2 -2
  204. package/dist/lang/hi.umd.prod.js +2 -2
  205. package/dist/lang/hr.umd.prod.js +2 -2
  206. package/dist/lang/hu.umd.prod.js +2 -2
  207. package/dist/lang/id.umd.prod.js +2 -2
  208. package/dist/lang/is.umd.prod.js +2 -2
  209. package/dist/lang/it.umd.prod.js +2 -2
  210. package/dist/lang/ja.umd.prod.js +2 -2
  211. package/dist/lang/kk.umd.prod.js +2 -2
  212. package/dist/lang/km.umd.prod.js +2 -2
  213. package/dist/lang/ko-KR.umd.prod.js +2 -2
  214. package/dist/lang/kur-CKB.umd.prod.js +2 -2
  215. package/dist/lang/lt.umd.prod.js +2 -2
  216. package/dist/lang/lu.umd.prod.js +2 -2
  217. package/dist/lang/lv.umd.prod.js +2 -2
  218. package/dist/lang/mk.umd.prod.js +2 -2
  219. package/dist/lang/ml.umd.prod.js +2 -2
  220. package/dist/lang/mm.umd.prod.js +2 -2
  221. package/dist/lang/ms-MY.umd.prod.js +2 -2
  222. package/dist/lang/ms.umd.prod.js +2 -2
  223. package/dist/lang/my.umd.prod.js +2 -2
  224. package/dist/lang/nb-NO.umd.prod.js +2 -2
  225. package/dist/lang/nl.umd.prod.js +2 -2
  226. package/dist/lang/pl.umd.prod.js +2 -2
  227. package/dist/lang/pt-BR.umd.prod.js +2 -2
  228. package/dist/lang/pt.umd.prod.js +2 -2
  229. package/dist/lang/ro.umd.prod.js +2 -2
  230. package/dist/lang/ru.umd.prod.js +2 -2
  231. package/dist/lang/sk.umd.prod.js +2 -2
  232. package/dist/lang/sl.umd.prod.js +2 -2
  233. package/dist/lang/sm.umd.prod.js +2 -2
  234. package/dist/lang/sr-CYR.umd.prod.js +2 -2
  235. package/dist/lang/sr.umd.prod.js +2 -2
  236. package/dist/lang/sv.umd.prod.js +2 -2
  237. package/dist/lang/ta.umd.prod.js +2 -2
  238. package/dist/lang/th.umd.prod.js +2 -2
  239. package/dist/lang/tl.umd.prod.js +2 -2
  240. package/dist/lang/tr.umd.prod.js +2 -2
  241. package/dist/lang/ug.umd.prod.js +2 -2
  242. package/dist/lang/uk.umd.prod.js +2 -2
  243. package/dist/lang/uz-Cyrl.umd.prod.js +2 -2
  244. package/dist/lang/uz-Latn.umd.prod.js +2 -2
  245. package/dist/lang/vi.umd.prod.js +2 -2
  246. package/dist/lang/zh-CN.umd.prod.js +2 -2
  247. package/dist/lang/zh-TW.umd.prod.js +2 -2
  248. package/dist/quasar.addon.prod.css +1 -1
  249. package/dist/quasar.addon.rtl.prod.css +1 -1
  250. package/dist/quasar.cjs.prod.js +19 -19
  251. package/dist/quasar.css +53 -53
  252. package/dist/quasar.esm.js +634 -559
  253. package/dist/quasar.esm.prod.js +14 -14
  254. package/dist/quasar.prod.css +1 -1
  255. package/dist/quasar.rtl.css +65 -65
  256. package/dist/quasar.rtl.prod.css +1 -1
  257. package/dist/quasar.sass +37 -37
  258. package/dist/quasar.umd.js +619 -544
  259. package/dist/quasar.umd.prod.js +23 -23
  260. package/dist/transforms/api-list.json +1 -1
  261. package/dist/transforms/import-map.json +1 -1
  262. package/dist/types/config.d.ts +3 -3
  263. package/dist/types/globals.d.ts +1 -1
  264. package/dist/types/index.d.ts +2245 -336
  265. package/dist/vetur/quasar-attributes.json +1 -1
  266. package/dist/vetur/quasar-tags.json +1 -1
  267. package/dist/web-types/web-types.json +1 -1
  268. package/lang/uk.js +1 -1
  269. package/lang/uk.mjs +1 -1
  270. package/package.json +28 -42
  271. package/src/api.extends.json +23 -21
  272. package/src/components/ajax-bar/QAjaxBar.js +2 -2
  273. package/src/components/ajax-bar/QAjaxBar.json +6 -5
  274. package/src/components/avatar/QAvatar.js +3 -3
  275. package/src/components/avatar/QAvatar.json +2 -2
  276. package/src/components/avatar/QAvatar.test.js +232 -0
  277. package/src/components/badge/QBadge.js +2 -2
  278. package/src/components/badge/QBadge.json +2 -2
  279. package/src/components/badge/QBadge.test.js +267 -0
  280. package/src/components/banner/QBanner.js +3 -3
  281. package/src/components/banner/QBanner.test.js +161 -0
  282. package/src/components/bar/QBar.js +3 -3
  283. package/src/components/bar/QBar.test.js +80 -0
  284. package/src/components/breadcrumbs/QBreadcrumbs.js +6 -4
  285. package/src/components/breadcrumbs/QBreadcrumbs.json +7 -7
  286. package/src/components/breadcrumbs/QBreadcrumbs.test.js +198 -0
  287. package/src/components/breadcrumbs/QBreadcrumbsEl.js +3 -3
  288. package/src/components/breadcrumbs/QBreadcrumbsEl.json +5 -5
  289. package/src/components/breadcrumbs/QBreadcrumbsEl.test.js +564 -0
  290. package/src/components/btn/QBtn.js +12 -6
  291. package/src/components/btn/QBtn.json +3 -2
  292. package/src/components/btn/QBtn.test.js +1529 -0
  293. package/src/components/btn/use-btn.js +8 -6
  294. package/src/components/btn/use-btn.json +14 -14
  295. package/src/components/btn/use-btn.test.js +134 -0
  296. package/src/components/btn-dropdown/QBtnDropdown.js +9 -10
  297. package/src/components/btn-dropdown/QBtnDropdown.json +16 -16
  298. package/src/components/btn-group/QBtnGroup.js +2 -2
  299. package/src/components/btn-toggle/QBtnToggle.js +3 -3
  300. package/src/components/btn-toggle/QBtnToggle.json +8 -8
  301. package/src/components/card/QCard.js +3 -3
  302. package/src/components/card/QCard.json +2 -2
  303. package/src/components/card/QCardActions.js +3 -3
  304. package/src/components/card/QCardActions.json +3 -3
  305. package/src/components/card/QCardSection.js +2 -2
  306. package/src/components/card/QCardSection.json +2 -2
  307. package/src/components/carousel/QCarousel.js +6 -6
  308. package/src/components/carousel/QCarousel.json +10 -10
  309. package/src/components/carousel/QCarouselControl.js +2 -2
  310. package/src/components/carousel/QCarouselControl.json +6 -6
  311. package/src/components/carousel/QCarouselSlide.js +3 -3
  312. package/src/components/carousel/QCarouselSlide.json +5 -8
  313. package/src/components/chat/QChatMessage.js +2 -2
  314. package/src/components/chat/QChatMessage.json +9 -9
  315. package/src/components/checkbox/QCheckbox.js +1 -1
  316. package/src/components/checkbox/use-checkbox.js +8 -8
  317. package/src/components/checkbox/use-checkbox.json +18 -16
  318. package/src/components/chip/QChip.js +7 -6
  319. package/src/components/chip/QChip.json +10 -8
  320. package/src/components/chip/QChip.test.js +902 -0
  321. package/src/components/circular-progress/QCircularProgress.js +5 -5
  322. package/src/components/circular-progress/QCircularProgress.json +9 -9
  323. package/src/components/circular-progress/{use-circular-progress.js → circular-progress.js} +1 -1
  324. package/src/components/circular-progress/circular-progress.test.js +14 -0
  325. package/src/components/color/QColor.js +10 -10
  326. package/src/components/color/QColor.json +9 -11
  327. package/src/components/date/QDate.js +9 -9
  328. package/src/components/date/QDate.json +42 -35
  329. package/src/components/date/use-datetime.js +2 -2
  330. package/src/components/date/use-datetime.json +8 -8
  331. package/src/components/dialog/QDialog.js +33 -22
  332. package/src/components/dialog/QDialog.json +18 -16
  333. package/src/components/dialog/QDialog.test.js +1264 -0
  334. package/src/components/dialog/test/DialogWrapper.vue +17 -0
  335. package/src/components/drawer/QDrawer.js +12 -12
  336. package/src/components/drawer/QDrawer.json +15 -16
  337. package/src/components/editor/QEditor.js +9 -9
  338. package/src/components/editor/QEditor.json +41 -49
  339. package/src/components/editor/editor-caret.js +1 -1
  340. package/src/components/editor/editor-utils.js +3 -3
  341. package/src/components/expansion-item/QExpansionItem.js +9 -9
  342. package/src/components/expansion-item/QExpansionItem.json +15 -15
  343. package/src/components/fab/QFab.js +5 -5
  344. package/src/components/fab/QFab.json +5 -5
  345. package/src/components/fab/QFabAction.js +4 -4
  346. package/src/components/fab/QFabAction.json +5 -6
  347. package/src/components/fab/use-fab.json +10 -12
  348. package/src/components/field/QField.js +2 -2
  349. package/src/components/field/QField.json +12 -8
  350. package/src/components/file/QFile.js +9 -9
  351. package/src/components/file/QFile.json +19 -14
  352. package/src/components/footer/QFooter.js +4 -4
  353. package/src/components/footer/QFooter.json +3 -5
  354. package/src/components/form/QForm.js +6 -6
  355. package/src/components/form/QForm.json +12 -7
  356. package/src/components/form/QFormChildMixin.js +2 -2
  357. package/src/components/form/QFormChildMixin.json +5 -4
  358. package/src/components/header/QHeader.js +3 -3
  359. package/src/components/header/QHeader.json +4 -6
  360. package/src/components/icon/QIcon.js +3 -3
  361. package/src/components/icon/QIcon.json +3 -3
  362. package/src/components/img/QImg.js +6 -6
  363. package/src/components/img/QImg.json +46 -60
  364. package/src/components/infinite-scroll/QInfiniteScroll.js +6 -6
  365. package/src/components/infinite-scroll/QInfiniteScroll.json +23 -10
  366. package/src/components/inner-loading/QInnerLoading.js +3 -3
  367. package/src/components/inner-loading/QInnerLoading.json +6 -8
  368. package/src/components/input/QInput.js +9 -9
  369. package/src/components/input/QInput.json +25 -14
  370. package/src/components/input/use-mask.js +1 -1
  371. package/src/components/input/use-mask.json +1 -1
  372. package/src/components/intersection/QIntersection.js +4 -4
  373. package/src/components/intersection/QIntersection.json +7 -7
  374. package/src/components/item/QItem.js +6 -6
  375. package/src/components/item/QItem.json +6 -6
  376. package/src/components/item/QItemLabel.js +2 -2
  377. package/src/components/item/QItemSection.js +2 -2
  378. package/src/components/item/QList.js +3 -3
  379. package/src/components/item/QList.json +2 -2
  380. package/src/components/knob/QKnob.js +7 -7
  381. package/src/components/knob/QKnob.json +7 -7
  382. package/src/components/layout/QLayout.js +5 -5
  383. package/src/components/layout/QLayout.json +3 -5
  384. package/src/components/linear-progress/QLinearProgress.js +4 -4
  385. package/src/components/linear-progress/QLinearProgress.json +3 -3
  386. package/src/components/markup-table/QMarkupTable.js +3 -3
  387. package/src/components/markup-table/QMarkupTable.json +3 -3
  388. package/src/components/menu/QMenu.js +20 -20
  389. package/src/components/menu/QMenu.json +16 -12
  390. package/src/components/no-ssr/QNoSsr.js +3 -3
  391. package/src/components/no-ssr/QNoSsr.json +3 -3
  392. package/src/components/option-group/QOptionGroup.js +2 -2
  393. package/src/components/option-group/QOptionGroup.json +15 -17
  394. package/src/components/page/QPage.js +3 -3
  395. package/src/components/page/QPage.json +2 -2
  396. package/src/components/page/QPageContainer.js +3 -3
  397. package/src/components/page-scroller/QPageScroller.js +2 -2
  398. package/src/components/page-scroller/QPageScroller.json +3 -3
  399. package/src/components/page-sticky/QPageSticky.js +1 -1
  400. package/src/components/page-sticky/QPageSticky.json +5 -5
  401. package/src/components/page-sticky/use-page-sticky.js +2 -2
  402. package/src/components/pagination/QPagination.js +4 -4
  403. package/src/components/pagination/QPagination.json +24 -22
  404. package/src/components/parallax/QParallax.js +6 -6
  405. package/src/components/parallax/QParallax.json +5 -5
  406. package/src/components/popup-edit/QPopupEdit.js +4 -4
  407. package/src/components/popup-edit/QPopupEdit.json +47 -33
  408. package/src/components/popup-proxy/QPopupProxy.js +3 -3
  409. package/src/components/popup-proxy/QPopupProxy.json +11 -7
  410. package/src/components/pull-to-refresh/QPullToRefresh.js +6 -6
  411. package/src/components/pull-to-refresh/QPullToRefresh.json +6 -2
  412. package/src/components/radio/QRadio.js +9 -9
  413. package/src/components/radio/QRadio.json +9 -7
  414. package/src/components/range/QRange.js +3 -3
  415. package/src/components/range/QRange.json +3 -7
  416. package/src/components/rating/QRating.js +6 -6
  417. package/src/components/rating/QRating.json +17 -20
  418. package/src/components/resize-observer/QResizeObserver.js +3 -3
  419. package/src/components/resize-observer/QResizeObserver.json +4 -3
  420. package/src/components/responsive/QResponsive.js +3 -3
  421. package/src/components/responsive/QResponsive.json +1 -1
  422. package/src/components/scroll-area/QScrollArea.js +7 -7
  423. package/src/components/scroll-area/QScrollArea.json +20 -14
  424. package/src/components/scroll-observer/QScrollObserver.js +3 -3
  425. package/src/components/scroll-observer/QScrollObserver.json +9 -6
  426. package/src/components/select/QSelect.js +10 -10
  427. package/src/components/select/QSelect.json +89 -72
  428. package/src/components/select/__tests__/QSelect.cy.js +21 -1
  429. package/src/components/separator/QSeparator.js +2 -2
  430. package/src/components/separator/QSeparator.json +3 -5
  431. package/src/components/skeleton/QSkeleton.js +3 -3
  432. package/src/components/skeleton/QSkeleton.json +14 -16
  433. package/src/components/slide-item/QSlideItem.js +5 -5
  434. package/src/components/slide-item/QSlideItem.json +5 -3
  435. package/src/components/slide-transition/QSlideTransition.js +1 -1
  436. package/src/components/slide-transition/QSlideTransition.json +1 -1
  437. package/src/components/slider/QSlider.js +4 -4
  438. package/src/components/slider/QSlider.json +2 -4
  439. package/src/components/slider/use-slider.js +7 -7
  440. package/src/components/slider/use-slider.json +19 -23
  441. package/src/components/space/QSpace.js +1 -1
  442. package/src/components/space/QSpace.test.js +17 -0
  443. package/src/components/spinner/QSpinner.js +1 -1
  444. package/src/components/spinner/QSpinner.json +2 -2
  445. package/src/components/spinner/QSpinnerAudio.js +1 -1
  446. package/src/components/spinner/QSpinnerAudio.json +1 -1
  447. package/src/components/spinner/QSpinnerBall.js +1 -1
  448. package/src/components/spinner/QSpinnerBall.json +1 -1
  449. package/src/components/spinner/QSpinnerBars.js +1 -1
  450. package/src/components/spinner/QSpinnerBars.json +1 -1
  451. package/src/components/spinner/QSpinnerBox.js +1 -1
  452. package/src/components/spinner/QSpinnerBox.json +1 -1
  453. package/src/components/spinner/QSpinnerClock.js +1 -1
  454. package/src/components/spinner/QSpinnerClock.json +1 -1
  455. package/src/components/spinner/QSpinnerComment.js +1 -1
  456. package/src/components/spinner/QSpinnerComment.json +1 -1
  457. package/src/components/spinner/QSpinnerCube.js +1 -1
  458. package/src/components/spinner/QSpinnerCube.json +1 -1
  459. package/src/components/spinner/QSpinnerDots.js +1 -1
  460. package/src/components/spinner/QSpinnerDots.json +1 -1
  461. package/src/components/spinner/QSpinnerFacebook.js +1 -1
  462. package/src/components/spinner/QSpinnerFacebook.json +1 -1
  463. package/src/components/spinner/QSpinnerGears.js +1 -1
  464. package/src/components/spinner/QSpinnerGears.json +1 -1
  465. package/src/components/spinner/QSpinnerGrid.js +1 -1
  466. package/src/components/spinner/QSpinnerGrid.json +1 -1
  467. package/src/components/spinner/QSpinnerHearts.js +1 -1
  468. package/src/components/spinner/QSpinnerHearts.json +1 -1
  469. package/src/components/spinner/QSpinnerHourglass.js +1 -1
  470. package/src/components/spinner/QSpinnerHourglass.json +1 -1
  471. package/src/components/spinner/QSpinnerInfinity.js +1 -1
  472. package/src/components/spinner/QSpinnerInfinity.json +1 -1
  473. package/src/components/spinner/QSpinnerIos.js +1 -1
  474. package/src/components/spinner/QSpinnerIos.json +1 -1
  475. package/src/components/spinner/QSpinnerOrbit.js +1 -1
  476. package/src/components/spinner/QSpinnerOrbit.json +1 -1
  477. package/src/components/spinner/QSpinnerOval.js +1 -1
  478. package/src/components/spinner/QSpinnerOval.json +1 -1
  479. package/src/components/spinner/QSpinnerPie.js +1 -1
  480. package/src/components/spinner/QSpinnerPie.json +1 -1
  481. package/src/components/spinner/QSpinnerPuff.js +1 -1
  482. package/src/components/spinner/QSpinnerPuff.json +1 -1
  483. package/src/components/spinner/QSpinnerRadio.js +1 -1
  484. package/src/components/spinner/QSpinnerRadio.json +1 -1
  485. package/src/components/spinner/QSpinnerRings.js +1 -1
  486. package/src/components/spinner/QSpinnerRings.json +1 -1
  487. package/src/components/spinner/QSpinnerTail.js +1 -1
  488. package/src/components/spinner/QSpinnerTail.json +1 -1
  489. package/src/components/spinner/{__spinner-mixin.json → spinner.json} +1 -1
  490. package/src/components/spinner/use-spinner.js +1 -1
  491. package/src/components/splitter/QSplitter.js +4 -4
  492. package/src/components/splitter/QSplitter.json +14 -14
  493. package/src/components/stepper/QStep.js +5 -5
  494. package/src/components/stepper/QStep.json +5 -11
  495. package/src/components/stepper/QStepper.js +5 -5
  496. package/src/components/stepper/QStepper.json +2 -4
  497. package/src/components/stepper/QStepperNavigation.js +2 -2
  498. package/src/components/stepper/StepHeader.js +2 -2
  499. package/src/components/tab-panels/QTabPanel.js +3 -3
  500. package/src/components/tab-panels/QTabPanel.json +1 -7
  501. package/src/components/tab-panels/QTabPanels.js +4 -4
  502. package/src/components/tab-panels/QTabPanels.json +1 -1
  503. package/src/components/table/QTable.js +8 -8
  504. package/src/components/table/QTable.json +148 -142
  505. package/src/components/table/QTd.js +2 -2
  506. package/src/components/table/QTd.json +1 -1
  507. package/src/components/table/QTh.js +2 -2
  508. package/src/components/table/QTh.json +1 -1
  509. package/src/components/table/QTr.js +2 -2
  510. package/src/components/table/QTr.json +1 -1
  511. package/src/components/table/table-column-selection.js +1 -1
  512. package/src/components/table/table-sort.js +2 -2
  513. package/src/components/tabs/QRouteTab.js +2 -2
  514. package/src/components/tabs/QRouteTab.json +2 -2
  515. package/src/components/tabs/QTab.js +1 -1
  516. package/src/components/tabs/QTab.json +6 -13
  517. package/src/components/tabs/QTabs.js +6 -6
  518. package/src/components/tabs/QTabs.json +8 -8
  519. package/src/components/tabs/use-tab.js +8 -8
  520. package/src/components/time/QTime.js +9 -9
  521. package/src/components/time/QTime.json +13 -23
  522. package/src/components/timeline/QTimeline.js +4 -4
  523. package/src/components/timeline/QTimeline.json +4 -4
  524. package/src/components/timeline/QTimelineEntry.js +3 -3
  525. package/src/components/timeline/QTimelineEntry.json +11 -11
  526. package/src/components/toggle/QToggle.js +1 -1
  527. package/src/components/toolbar/QToolbar.js +2 -2
  528. package/src/components/toolbar/QToolbarTitle.js +2 -2
  529. package/src/components/tooltip/QTooltip.js +15 -15
  530. package/src/components/tooltip/QTooltip.json +22 -24
  531. package/src/components/tree/QTree.js +5 -5
  532. package/src/components/tree/QTree.json +38 -30
  533. package/src/components/uploader/QUploader.js +1 -1
  534. package/src/components/uploader/QUploader.json +29 -14
  535. package/src/components/uploader/QUploaderAddTrigger.js +2 -2
  536. package/src/components/uploader/uploader-core.js +8 -8
  537. package/src/components/uploader/xhr-uploader-plugin.js +3 -1
  538. package/src/components/uploader/xhr-uploader-plugin.json +19 -19
  539. package/src/components/video/QVideo.js +2 -2
  540. package/src/components/video/QVideo.json +16 -20
  541. package/src/components/video/QVideo.test.js +183 -0
  542. package/src/components/virtual-scroll/QVirtualScroll.js +4 -4
  543. package/src/components/virtual-scroll/QVirtualScroll.json +8 -10
  544. package/src/components/virtual-scroll/use-virtual-scroll.js +3 -3
  545. package/src/components/virtual-scroll/use-virtual-scroll.json +16 -11
  546. package/src/composables/private.use-align/use-align.test.js +62 -0
  547. package/src/composables/{private → private.use-anchor}/use-anchor.js +3 -3
  548. package/src/composables/{private → private.use-anchor}/use-anchor.json +5 -6
  549. package/src/composables/private.use-dark/use-dark.test.js +68 -0
  550. package/src/composables/{private → private.use-field}/use-field.js +8 -8
  551. package/src/composables/{private → private.use-field}/use-field.json +14 -20
  552. package/src/composables/{private → private.use-file}/use-file.js +2 -2
  553. package/src/composables/{private → private.use-file}/use-file.json +10 -10
  554. package/src/composables/{private → private.use-fullscreen}/use-fullscreen.js +2 -2
  555. package/src/composables/{private → private.use-fullscreen}/use-fullscreen.json +10 -6
  556. package/src/composables/{private → private.use-history}/use-history.js +1 -1
  557. package/src/composables/private.use-history/use-history.test.js +116 -0
  558. package/src/composables/{private → private.use-key-composition}/use-key-composition.js +1 -1
  559. package/src/composables/{private → private.use-model-toggle}/use-model-toggle.js +1 -1
  560. package/src/composables/{private → private.use-panel}/use-panel.child.json +1 -3
  561. package/src/composables/{private → private.use-panel}/use-panel.js +4 -4
  562. package/src/composables/{private → private.use-panel}/use-panel.json +20 -15
  563. package/src/composables/{private → private.use-portal}/use-portal.js +21 -6
  564. package/src/composables/{private → private.use-prevent-scroll}/use-prevent-scroll.js +1 -1
  565. package/src/composables/{private → private.use-ratio}/use-ratio.json +4 -3
  566. package/src/composables/private.use-ratio/use-ratio.test.js +40 -0
  567. package/src/composables/{private → private.use-router-link}/use-router-link.js +1 -1
  568. package/src/composables/{private → private.use-router-link}/use-router-link.json +6 -6
  569. package/src/composables/{private → private.use-scroll-target}/use-scroll-target.js +2 -5
  570. package/src/composables/{private → private.use-size}/use-size.json +1 -1
  571. package/src/composables/private.use-size/use-size.test.js +40 -0
  572. package/src/composables/{private → private.use-transition}/use-transition.json +3 -3
  573. package/src/composables/private.use-transition/use-transition.test.js +118 -0
  574. package/src/composables/{private → private.use-validate}/use-validate.js +4 -4
  575. package/src/composables/{private → private.use-validate}/use-validate.json +9 -7
  576. package/src/composables/{use-dialog-plugin-component.js → use-dialog-plugin-component/use-dialog-plugin-component.js} +2 -4
  577. package/src/composables/{private/use-form.json → use-form/private.use-form.json} +1 -1
  578. package/src/composables/use-form/private.use-form.test.js +107 -0
  579. package/src/composables/{use-form-child.js → use-form/use-form-child.js} +1 -1
  580. package/src/composables/{use-hydration.js → use-hydration/use-hydration.js} +1 -1
  581. package/src/composables/use-hydration/use-hydration.test.js +27 -0
  582. package/src/composables/{use-id.js → use-id/use-id.js} +2 -2
  583. package/src/composables/use-id/use-id.test.js +72 -0
  584. package/src/composables/{use-interval.js → use-interval/use-interval.js} +1 -1
  585. package/src/composables/{use-meta.js → use-meta/use-meta.js} +1 -1
  586. package/src/composables/{use-quasar.js → use-quasar/use-quasar.js} +2 -1
  587. package/src/composables/use-quasar/use-quasar.test.js +35 -0
  588. package/src/composables/{use-tick.js → use-tick/use-tick.js} +1 -1
  589. package/src/composables/{use-timeout.js → use-timeout/use-timeout.js} +1 -1
  590. package/src/composables.js +12 -10
  591. package/src/css/index.sass +7 -7
  592. package/src/directives/{ClosePopup.js → close-popup/ClosePopup.js} +4 -4
  593. package/src/directives/{ClosePopup.json → close-popup/ClosePopup.json} +5 -5
  594. package/src/directives/{Intersection.js → intersection/Intersection.js} +3 -3
  595. package/src/directives/{Intersection.json → intersection/Intersection.json} +4 -6
  596. package/src/directives/{Morph.js → morph/Morph.js} +2 -2
  597. package/src/directives/{Morph.json → morph/Morph.json} +21 -21
  598. package/src/directives/{Mutation.js → mutation/Mutation.js} +2 -2
  599. package/src/directives/{Mutation.json → mutation/Mutation.json} +10 -12
  600. package/src/directives/{Ripple.js → ripple/Ripple.js} +6 -6
  601. package/src/directives/{Ripple.json → ripple/Ripple.json} +9 -15
  602. package/src/directives/ripple/Ripple.test.js +340 -0
  603. package/src/directives/{Scroll.js → scroll/Scroll.js} +4 -4
  604. package/src/directives/{Scroll.json → scroll/Scroll.json} +2 -2
  605. package/src/directives/{ScrollFire.js → scroll-fire/ScrollFire.js} +6 -6
  606. package/src/directives/{ScrollFire.json → scroll-fire/ScrollFire.json} +1 -1
  607. package/src/directives/{TouchHold.js → touch-hold/TouchHold.js} +5 -5
  608. package/src/directives/{TouchHold.json → touch-hold/TouchHold.json} +6 -6
  609. package/src/directives/{TouchPan.js → touch-pan/TouchPan.js} +6 -6
  610. package/src/directives/{TouchPan.json → touch-pan/TouchPan.json} +4 -4
  611. package/src/directives/{TouchRepeat.js → touch-repeat/TouchRepeat.js} +6 -6
  612. package/src/directives/{TouchRepeat.json → touch-repeat/TouchRepeat.json} +4 -4
  613. package/src/directives/{TouchSwipe.js → touch-swipe/TouchSwipe.js} +6 -6
  614. package/src/directives/{TouchSwipe.json → touch-swipe/TouchSwipe.json} +4 -4
  615. package/src/directives.js +11 -11
  616. package/src/index.dev.js +10 -4
  617. package/src/index.prod.js +11 -4
  618. package/src/index.ssr.js +11 -4
  619. package/src/index.umd.js +12 -4
  620. package/src/install-quasar.js +17 -12
  621. package/src/plugins/{AddressbarColor.js → addressbar/AddressbarColor.js} +3 -3
  622. package/src/plugins/{AddressbarColor.json → addressbar/AddressbarColor.json} +3 -2
  623. package/src/plugins/{AppFullscreen.js → app-fullscreen/AppFullscreen.js} +3 -3
  624. package/src/plugins/{AppFullscreen.json → app-fullscreen/AppFullscreen.json} +1 -0
  625. package/src/plugins/{AppVisibility.js → app-visibility/AppVisibility.js} +3 -3
  626. package/src/plugins/bottom-sheet/BottomSheet.js +8 -0
  627. package/src/plugins/{BottomSheet.json → bottom-sheet/BottomSheet.json} +11 -11
  628. package/src/{components/dialog-bottom-sheet/BottomSheet.js → plugins/bottom-sheet/component/BottomSheetComponent.js} +10 -10
  629. package/src/plugins/{Cookies.json → cookies/Cookies.json} +19 -18
  630. package/src/plugins/{Dark.js → dark/Dark.js} +2 -2
  631. package/src/plugins/{Dark.json → dark/Dark.json} +8 -5
  632. package/src/plugins/dialog/Dialog.js +8 -0
  633. package/src/plugins/{Dialog.json → dialog/Dialog.json} +17 -17
  634. package/src/{components/dialog-plugin/DialogPlugin.js → plugins/dialog/component/DialogPluginComponent.js} +14 -14
  635. package/src/{icon-set.js → plugins/icon-set/IconSet.js} +29 -10
  636. package/src/plugins/icon-set/IconSet.json +1417 -0
  637. package/src/plugins/icon-set/IconSet.test.js +346 -0
  638. package/src/{lang.js → plugins/lang/Lang.js} +25 -15
  639. package/src/plugins/lang/Lang.json +1100 -0
  640. package/src/plugins/lang/Lang.test.js +267 -0
  641. package/src/plugins/{Loading.js → loading/Loading.js} +8 -7
  642. package/src/plugins/{Loading.json → loading/Loading.json} +19 -17
  643. package/src/plugins/{LoadingBar.js → loading-bar/LoadingBar.js} +7 -7
  644. package/src/plugins/{LoadingBar.json → loading-bar/LoadingBar.json} +10 -5
  645. package/src/plugins/{Meta.js → meta/Meta.js} +2 -2
  646. package/src/plugins/{Notify.js → notify/Notify.js} +11 -10
  647. package/src/plugins/{Notify.json → notify/Notify.json} +60 -74
  648. package/src/plugins/{Platform.js → platform/Platform.js} +5 -12
  649. package/src/plugins/{Platform.json → platform/Platform.json} +12 -10
  650. package/src/plugins/platform/Platform.test.js +104 -0
  651. package/src/{body.js → plugins/private.body/Body.js} +5 -4
  652. package/src/{history.js → plugins/private.history/History.js} +2 -2
  653. package/src/plugins/{Screen.js → screen/Screen.js} +5 -5
  654. package/src/plugins/{Screen.json → screen/Screen.json} +10 -14
  655. package/src/plugins/{LocalStorage.js → storage/LocalStorage.js} +2 -2
  656. package/src/plugins/storage/LocalStorage.json +5 -0
  657. package/src/plugins/storage/LocalStorage.test.js +323 -0
  658. package/src/plugins/{SessionStorage.js → storage/SessionStorage.js} +2 -2
  659. package/src/plugins/storage/SessionStorage.json +5 -0
  660. package/src/plugins/storage/SessionStorage.test.js +323 -0
  661. package/src/{utils/private → plugins/storage/engine}/web-storage.js +21 -10
  662. package/src/{utils/private → plugins/storage/engine}/web-storage.json +29 -20
  663. package/src/plugins/storage/engine/web-storage.test.js +43 -0
  664. package/src/plugins.js +20 -16
  665. package/src/utils/EventBus/EventBus.test.js +108 -0
  666. package/src/utils/clone/clone.test.js +111 -0
  667. package/src/utils/colors/colors.test.js +459 -0
  668. package/src/utils/{copy-to-clipboard.js → copy-to-clipboard/copy-to-clipboard.js} +1 -1
  669. package/src/utils/{create-meta-mixin.js → create-meta-mixin/create-meta-mixin.js} +1 -1
  670. package/src/utils/{create-uploader-component.js → create-uploader-component/create-uploader-component.js} +4 -4
  671. package/src/utils/css-var/get-css-var.test.js +32 -0
  672. package/src/utils/css-var/set-css-var.test.js +36 -0
  673. package/src/utils/{date.js → date/date.js} +6 -6
  674. package/src/utils/debounce/debounce.test.js +188 -0
  675. package/src/utils/extend/extend.test.js +93 -0
  676. package/src/utils/{format.js → format/format.js} +2 -2
  677. package/src/utils/format/format.test.js +107 -0
  678. package/src/utils/{frame-debounce.js → frame-debounce/frame-debounce.js} +1 -1
  679. package/src/utils/frame-debounce/frame-debounce.test.js +127 -0
  680. package/src/utils/is/is.test.js +125 -0
  681. package/src/utils/{morph.js → morph/morph.js} +1 -1
  682. package/src/utils/{open-url.js → open-url/open-url.js} +3 -3
  683. package/src/utils/patterns/patterns.test.js +403 -0
  684. package/src/utils/{private → private.click-outside}/click-outside.js +2 -2
  685. package/src/utils/{private/define-reactive-plugin.js → private.create/create.js} +6 -3
  686. package/src/utils/private.create/create.test.js +58 -0
  687. package/src/utils/private.focus/focus-manager.test.js +190 -0
  688. package/src/utils/{private → private.focus}/focusout.js +1 -1
  689. package/src/utils/private.focus/focusout.test.js +114 -0
  690. package/src/utils/private.get-emits-object/get-emits-object.test.js +29 -0
  691. package/src/utils/private.global/global-config.test.js +54 -0
  692. package/src/utils/{private → private.global}/global-dialog.js +1 -1
  693. package/src/utils/{private → private.global}/global-dialog.json +3 -3
  694. package/src/utils/{private → private.global}/global-nodes.js +1 -1
  695. package/src/utils/private.global/global-nodes.test.js +110 -0
  696. package/src/utils/private.inject-obj-prop/inject-obj-prop.test.js +104 -0
  697. package/src/utils/{private → private.keyboard}/escape-key.js +2 -2
  698. package/src/utils/private.keyboard/escape-key.test.js +117 -0
  699. package/src/utils/private.noop-ssr-directive-transform/noop-ssr-directive-transform.test.js +14 -0
  700. package/src/utils/{private → private.portal}/portal.js +1 -1
  701. package/src/utils/{private → private.position-engine}/position-engine.js +2 -2
  702. package/src/utils/private.rtl/rtl.test.js +13 -0
  703. package/src/utils/{private → private.selection}/selection.js +1 -1
  704. package/src/utils/private.sort/sort.test.js +25 -0
  705. package/src/utils/{private → private.symbols}/symbols.js +1 -1
  706. package/src/utils/private.touch/touch.test.js +102 -0
  707. package/src/utils/{prevent-scroll.js → scroll/prevent-scroll.js} +3 -3
  708. package/src/utils/{scroll.js → scroll/scroll.js} +1 -1
  709. package/src/utils/throttle/throttle.test.js +146 -0
  710. package/src/utils/uid/uid.test.js +17 -0
  711. package/src/utils.js +24 -24
  712. package/src/vue-plugin.js +12 -4
  713. package/src/Lang.json +0 -19
  714. package/src/api-file-example.json +0 -94
  715. package/src/components/avatar/__tests__/QAvatar.cy.js +0 -120
  716. package/src/components/badge/__tests__/QBadge.cy.js +0 -148
  717. package/src/components/banner/__tests__/QBanner.cy.js +0 -106
  718. package/src/components/bar/__tests__/QBar.cy.js +0 -45
  719. package/src/components/breadcrumbs/__tests__/QBreadcrumbs.cy.js +0 -111
  720. package/src/components/breadcrumbs/__tests__/QBreadcrumbsEl.cy.js +0 -87
  721. package/src/components/btn/__tests__/QBtn.cy.js +0 -128
  722. package/src/components/btn/__tests__/use-btn.cy.js +0 -517
  723. package/src/components/chip/__tests__/QChip.cy.js +0 -480
  724. package/src/components/dialog/__tests__/DialogWrapper.vue +0 -33
  725. package/src/components/dialog/__tests__/QDialog.cy.js +0 -543
  726. package/src/components/tabs/__tests__/QRouteTab.cy.js +0 -9
  727. package/src/composables/private/__tests__/use-form.cy.js +0 -11
  728. package/src/composables/private/__tests__/use-size.cy.js +0 -36
  729. package/src/composables/private/__tests__/use-transition.cy.js +0 -111
  730. package/src/plugins/BottomSheet.js +0 -11
  731. package/src/plugins/Dialog.js +0 -11
  732. package/src/plugins/LocalStorage.json +0 -5
  733. package/src/plugins/SessionStorage.json +0 -5
  734. package/src/utils/private/create.js +0 -4
  735. /package/src/components/breadcrumbs/{__tests__ → test}/BasicBreadcrumbs.vue +0 -0
  736. /package/src/components/breadcrumbs/{__tests__ → test}/BreadcrumbWithSeparatorSlot.vue +0 -0
  737. /package/src/composables/{private/__tests__ → __tests__}/FieldWrapper.vue +0 -0
  738. /package/src/composables/{private/__tests__ → __tests__}/use-anchor.cy.js +0 -0
  739. /package/src/composables/{private/__tests__ → __tests__}/use-field.cy.js +0 -0
  740. /package/src/composables/{private/__tests__ → __tests__}/use-file.cy.js +0 -0
  741. /package/src/composables/{private/__tests__ → __tests__}/use-fullscreen.cy.js +0 -0
  742. /package/src/composables/{private/__tests__ → __tests__}/use-model-toggle.cy.js +0 -0
  743. /package/src/composables/{private/__tests__ → __tests__}/use-portal.cy.js +0 -0
  744. /package/src/composables/{private/__tests__ → __tests__}/use-router-link.cy.js +0 -0
  745. /package/src/composables/{private/__tests__ → __tests__}/use-validate.cy.js +0 -0
  746. /package/src/composables/{private → private.use-align}/use-align.js +0 -0
  747. /package/src/composables/{private → private.use-dark}/use-dark.js +0 -0
  748. /package/src/composables/{private → private.use-file}/use-file-dom-props.js +0 -0
  749. /package/src/composables/{private → private.use-model-toggle}/use-model-toggle.json +0 -0
  750. /package/src/composables/{private → private.use-panel}/use-panel.sass +0 -0
  751. /package/src/composables/{private → private.use-portal}/use-portal.json +0 -0
  752. /package/src/composables/{private → private.use-ratio}/use-ratio.js +0 -0
  753. /package/src/composables/{private → private.use-refocus-target}/use-refocus-target.js +0 -0
  754. /package/src/composables/{private → private.use-size}/use-size.js +0 -0
  755. /package/src/composables/{private → private.use-transition}/use-transition.js +0 -0
  756. /package/src/composables/{private/use-form.js → use-form/private.use-form.js} +0 -0
  757. /package/src/composables/{use-render-cache.js → use-render-cache/use-render-cache.js} +0 -0
  758. /package/src/composables/{use-split-attrs.js → use-split-attrs/use-split-attrs.js} +0 -0
  759. /package/src/directives/{Morph.sass → morph/Morph.sass} +0 -0
  760. /package/src/directives/{Ripple.sass → ripple/Ripple.sass} +0 -0
  761. /package/src/plugins/{AppVisibility.json → app-visibility/AppVisibility.json} +0 -0
  762. /package/src/{components/dialog-bottom-sheet/BottomSheet.sass → plugins/bottom-sheet/component/BottomSheetComponent.sass} +0 -0
  763. /package/src/plugins/{Cookies.js → cookies/Cookies.js} +0 -0
  764. /package/src/{components/dialog-plugin/DialogPlugin.sass → plugins/dialog/component/DialogPluginComponent.sass} +0 -0
  765. /package/src/plugins/{Loading.sass → loading/Loading.sass} +0 -0
  766. /package/src/plugins/{Meta.json → meta/Meta.json} +0 -0
  767. /package/src/plugins/{Notify.sass → notify/Notify.sass} +0 -0
  768. /package/src/utils/{EventBus.js → EventBus/EventBus.js} +0 -0
  769. /package/src/utils/{clone.js → clone/clone.js} +0 -0
  770. /package/src/utils/{colors.js → colors/colors.js} +0 -0
  771. /package/src/utils/{get-css-var.js → css-var/get-css-var.js} +0 -0
  772. /package/src/utils/{set-css-var.js → css-var/set-css-var.js} +0 -0
  773. /package/src/utils/{private/date-persian.js → date/private.persian.js} +0 -0
  774. /package/src/utils/{debounce.js → debounce/debounce.js} +0 -0
  775. /package/src/utils/{dom.js → dom/dom.js} +0 -0
  776. /package/src/utils/{event.js → event/event.js} +0 -0
  777. /package/src/utils/{export-file.js → export-file/export-file.js} +0 -0
  778. /package/src/utils/{extend.js → extend/extend.js} +0 -0
  779. /package/src/utils/{is.js → is/is.js} +0 -0
  780. /package/src/utils/{patterns.js → patterns/patterns.js} +0 -0
  781. /package/src/utils/{private → private.focus}/focus-manager.js +0 -0
  782. /package/src/utils/{private → private.get-emits-object}/get-emits-object.js +0 -0
  783. /package/src/utils/{private → private.global}/global-config.js +0 -0
  784. /package/src/utils/{private → private.inject-obj-prop}/inject-obj-prop.js +0 -0
  785. /package/src/utils/{private → private.keyboard}/key-composition.js +0 -0
  786. /package/src/utils/{private → private.noop-ssr-directive-transform}/noop-ssr-directive-transform.js +0 -0
  787. /package/src/utils/{private → private.option-sizes}/option-sizes.js +0 -0
  788. /package/src/utils/{private → private.render}/render.js +0 -0
  789. /package/src/utils/{private → private.rtl}/rtl.js +0 -0
  790. /package/src/utils/{private → private.sort}/sort.js +0 -0
  791. /package/src/utils/{private → private.touch}/touch.js +0 -0
  792. /package/src/utils/{private → private.vm}/vm.js +0 -0
  793. /package/src/utils/{run-sequential-promises.js → run-sequential-promises/run-sequential-promises.js} +0 -0
  794. /package/src/utils/{throttle.js → throttle/throttle.js} +0 -0
  795. /package/src/utils/{uid.js → uid/uid.js} +0 -0
@@ -0,0 +1,1529 @@
1
+ import { mount, flushPromises } from '@vue/test-utils'
2
+ import { describe, test, expect, vi } from 'vitest'
3
+
4
+ import QBtn from './QBtn.js'
5
+
6
+ import { btnPadding, defaultSizes } from './use-btn.js'
7
+ import { alignMap } from 'quasar/src/composables/private.use-align/use-align.js'
8
+ import { getRouter } from 'testing/runtime/router.js'
9
+
10
+ describe('[QBtn API]', () => {
11
+ describe('[Props]', () => {
12
+ describe('[(prop)size]', () => {
13
+ test('is defined correctly', () => {
14
+ expect(QBtn.props.size).toBeDefined()
15
+ })
16
+
17
+ test('type String has effect (in pixels)', async () => {
18
+ const propVal = '50px'
19
+ const wrapper = mount(QBtn)
20
+ const target = wrapper.get('.q-btn')
21
+
22
+ expect(
23
+ target.$style('font-size')
24
+ ).not.toBe(propVal)
25
+
26
+ await wrapper.setProps({ size: propVal })
27
+ await flushPromises()
28
+
29
+ expect(
30
+ target.$style('font-size')
31
+ ).toBe(propVal)
32
+ })
33
+
34
+ test('type String has effect (as "xs")', async () => {
35
+ const propVal = 'xs'
36
+ const wrapper = mount(QBtn)
37
+ const target = wrapper.get('.q-btn')
38
+
39
+ expect(
40
+ target.$style('font-size')
41
+ ).not.toBe(`${ defaultSizes.xs }px`)
42
+
43
+ await wrapper.setProps({ size: propVal })
44
+ await flushPromises()
45
+
46
+ expect(
47
+ target.$style('font-size')
48
+ ).toBe(`${ defaultSizes.xs }px`)
49
+ })
50
+ })
51
+
52
+ describe('[(prop)type]', () => {
53
+ test('is defined correctly', () => {
54
+ expect(QBtn.props.type).toBeDefined()
55
+ })
56
+
57
+ test.each([
58
+ [ 'button' ],
59
+ [ 'a' ]
60
+ ])('type "%s" has effect', (propVal) => {
61
+ const wrapper = mount(QBtn, {
62
+ props: {
63
+ type: propVal
64
+ }
65
+ })
66
+
67
+ expect(
68
+ wrapper.get('.q-btn').element.tagName.toLowerCase()
69
+ ).toBe(propVal)
70
+ })
71
+
72
+ test.each([
73
+ [ 'submit' ],
74
+ [ 'reset' ]
75
+ ])('type "%s" has effect', (propVal) => {
76
+ const wrapper = mount(QBtn, {
77
+ props: {
78
+ type: propVal
79
+ }
80
+ })
81
+
82
+ expect(
83
+ wrapper.get('.q-btn').element.tagName.toLowerCase()
84
+ ).toBe('button')
85
+ })
86
+
87
+ // accessibility
88
+ test.each([
89
+ [ 'media/html' ],
90
+ [ 'image/png' ]
91
+ ])('type "%s" has effect', (propVal) => {
92
+ const wrapper = mount(QBtn, {
93
+ props: {
94
+ type: propVal,
95
+ href: 'https://quasar.dev'
96
+ }
97
+ })
98
+
99
+ const target = wrapper.get('.q-btn')
100
+
101
+ expect(
102
+ target.element.tagName.toLowerCase()
103
+ ).toBe('a')
104
+
105
+ expect(
106
+ target.attributes('type')
107
+ ).toBe(propVal)
108
+ })
109
+ })
110
+
111
+ describe('[(prop)to]', () => {
112
+ test('is defined correctly', () => {
113
+ expect(QBtn.props.to).toBeDefined()
114
+ })
115
+
116
+ test('type String has effect', async () => {
117
+ const testRoute = '/home/dashboard'
118
+ const router = await getRouter(testRoute)
119
+
120
+ const wrapper = mount(QBtn, {
121
+ global: {
122
+ plugins: [ router ]
123
+ }
124
+ })
125
+
126
+ expect(
127
+ wrapper.find('a').exists()
128
+ ).toBe(false)
129
+
130
+ await wrapper.setProps({ to: testRoute })
131
+ await flushPromises()
132
+
133
+ expect(
134
+ wrapper.get('a').attributes('href')
135
+ ).toBe(testRoute)
136
+
137
+ const routerFn = vi.spyOn(router, 'push')
138
+
139
+ await wrapper.trigger('click')
140
+ await flushPromises()
141
+
142
+ expect(
143
+ router.currentRoute.value.path
144
+ ).toBe(testRoute)
145
+
146
+ expect(routerFn).toHaveBeenCalledTimes(1)
147
+ expect(routerFn).toHaveBeenCalledWith(testRoute)
148
+ })
149
+
150
+ test('type Object has effect', async () => {
151
+ const testRoute = '/my-route-name'
152
+ const propVal = { path: testRoute }
153
+ const router = await getRouter(testRoute)
154
+
155
+ const wrapper = mount(QBtn, {
156
+ global: {
157
+ plugins: [ router ]
158
+ }
159
+ })
160
+
161
+ expect(
162
+ wrapper.find('a').exists()
163
+ ).toBe(false)
164
+
165
+ await wrapper.setProps({ to: propVal })
166
+ await flushPromises()
167
+
168
+ expect(
169
+ wrapper.get('a').attributes('href')
170
+ ).toBe(testRoute)
171
+
172
+ const routerFn = vi.spyOn(router, 'push')
173
+
174
+ await wrapper.trigger('click')
175
+ await flushPromises()
176
+
177
+ expect(
178
+ router.currentRoute.value.path
179
+ ).toBe(testRoute)
180
+
181
+ expect(routerFn).toHaveBeenCalledTimes(1)
182
+ expect(routerFn).toHaveBeenCalledWith(propVal)
183
+ })
184
+ })
185
+
186
+ describe('[(prop)replace]', () => {
187
+ test('is defined correctly', () => {
188
+ expect(QBtn.props.replace).toBeDefined()
189
+ })
190
+
191
+ test('type Boolean has effect', async () => {
192
+ const testRoute = '/test-route'
193
+ const router = await getRouter(testRoute)
194
+
195
+ const wrapper = mount(QBtn, {
196
+ props: {
197
+ replace: true,
198
+ to: testRoute
199
+ },
200
+ global: {
201
+ plugins: [ router ]
202
+ }
203
+ })
204
+
205
+ expect(
206
+ wrapper.get('a').attributes('href')
207
+ ).toBe(testRoute)
208
+
209
+ const routerFn = vi.spyOn(router, 'replace')
210
+
211
+ await wrapper.trigger('click')
212
+ await flushPromises()
213
+
214
+ expect(
215
+ router.currentRoute.value.path
216
+ ).toBe(testRoute)
217
+
218
+ expect(routerFn).toHaveBeenCalledTimes(1)
219
+ expect(routerFn).toHaveBeenCalledWith(testRoute)
220
+ })
221
+ })
222
+
223
+ describe('[(prop)href]', () => {
224
+ test('is defined correctly', () => {
225
+ expect(QBtn.props.href).toBeDefined()
226
+ })
227
+
228
+ test('type String has effect', async () => {
229
+ const propVal = 'https://quasar.dev'
230
+ const wrapper = mount(QBtn)
231
+
232
+ expect(
233
+ wrapper.find('a').exists()
234
+ ).toBe(false)
235
+
236
+ await wrapper.setProps({ href: propVal })
237
+ await flushPromises()
238
+
239
+ expect(
240
+ wrapper.get('a').attributes('href')
241
+ ).toBe(propVal)
242
+ })
243
+ })
244
+
245
+ describe('[(prop)target]', () => {
246
+ test('is defined correctly', () => {
247
+ expect(QBtn.props.target).toBeDefined()
248
+ })
249
+
250
+ test('type String has effect', () => {
251
+ const propVal = '_blank'
252
+ const href = 'https://quasar.dev'
253
+ const wrapper = mount(QBtn, {
254
+ props: {
255
+ href,
256
+ target: propVal
257
+ }
258
+ })
259
+
260
+ const link = wrapper.get('a')
261
+
262
+ expect(
263
+ link.attributes('href')
264
+ ).toBe(href)
265
+
266
+ expect(
267
+ link.attributes('target')
268
+ ).toBe(propVal)
269
+ })
270
+ })
271
+
272
+ describe('[(prop)label]', () => {
273
+ test('is defined correctly', () => {
274
+ expect(QBtn.props.label).toBeDefined()
275
+ })
276
+
277
+ test('type String has effect', async () => {
278
+ const propVal = 'Button Label'
279
+ const wrapper = mount(QBtn)
280
+
281
+ expect(wrapper.text()).not.toContain(propVal)
282
+
283
+ await wrapper.setProps({ label: propVal })
284
+ await flushPromises()
285
+
286
+ expect(wrapper.text()).toContain(propVal)
287
+ })
288
+
289
+ test('type Number has effect', async () => {
290
+ const propVal = 10
291
+ const wrapper = mount(QBtn)
292
+
293
+ expect(wrapper.text()).not.toContain('' + propVal)
294
+
295
+ await wrapper.setProps({ label: propVal })
296
+ await flushPromises()
297
+
298
+ expect(wrapper.text()).toContain('' + propVal)
299
+ })
300
+ })
301
+
302
+ describe('[(prop)icon]', () => {
303
+ test('is defined correctly', () => {
304
+ expect(QBtn.props.icon).toBeDefined()
305
+ })
306
+
307
+ test('type String has effect', async () => {
308
+ const propVal = 'map'
309
+ const wrapper = mount(QBtn)
310
+
311
+ expect(
312
+ wrapper.find('.q-icon').exists()
313
+ ).toBe(false)
314
+
315
+ await wrapper.setProps({ icon: propVal })
316
+ await flushPromises()
317
+
318
+ expect(
319
+ wrapper.get('.q-icon').text()
320
+ ).toContain(propVal)
321
+ })
322
+ })
323
+
324
+ describe('[(prop)icon-right]', () => {
325
+ test('is defined correctly', () => {
326
+ expect(QBtn.props.iconRight).toBeDefined()
327
+ })
328
+
329
+ test('type String has effect', async () => {
330
+ const propVal = 'map'
331
+ const wrapper = mount(QBtn)
332
+
333
+ expect(
334
+ wrapper.find('.q-icon').exists()
335
+ ).toBe(false)
336
+
337
+ await wrapper.setProps({ iconRight: propVal })
338
+ await flushPromises()
339
+
340
+ expect(
341
+ wrapper.get('.q-icon').text()
342
+ ).toContain(propVal)
343
+ })
344
+ })
345
+
346
+ describe('[(prop)outline]', () => {
347
+ test('is defined correctly', () => {
348
+ expect(QBtn.props.outline).toBeDefined()
349
+ })
350
+
351
+ test('type Boolean has effect', async () => {
352
+ const wrapper = mount(QBtn)
353
+ const target = wrapper.get('.q-btn')
354
+
355
+ expect(
356
+ target.classes()
357
+ ).not.toContain('q-btn--outline')
358
+
359
+ await wrapper.setProps({ outline: true })
360
+ await flushPromises()
361
+
362
+ expect(
363
+ target.classes()
364
+ ).toContain('q-btn--outline')
365
+
366
+ expect(
367
+ target.$computedStyle('background')
368
+ ).toBe('transparent')
369
+ })
370
+ })
371
+
372
+ describe('[(prop)flat]', () => {
373
+ test('is defined correctly', () => {
374
+ expect(QBtn.props.flat).toBeDefined()
375
+ })
376
+
377
+ test('type Boolean has effect', async () => {
378
+ const wrapper = mount(QBtn)
379
+ const target = wrapper.get('.q-btn')
380
+
381
+ expect(
382
+ target.classes()
383
+ ).not.toContain('q-btn--flat')
384
+
385
+ await wrapper.setProps({ flat: true })
386
+ await flushPromises()
387
+
388
+ expect(
389
+ target.classes()
390
+ ).toContain('q-btn--flat')
391
+ })
392
+ })
393
+
394
+ describe('[(prop)unelevated]', () => {
395
+ test('is defined correctly', () => {
396
+ expect(QBtn.props.unelevated).toBeDefined()
397
+ })
398
+
399
+ test('type Boolean has effect', async () => {
400
+ const wrapper = mount(QBtn)
401
+ const target = wrapper.get('.q-btn')
402
+
403
+ expect(
404
+ target.classes()
405
+ ).not.toContain('q-btn--unelevated')
406
+
407
+ await wrapper.setProps({ unelevated: true })
408
+ await flushPromises()
409
+
410
+ expect(
411
+ target.classes()
412
+ ).toContain('q-btn--unelevated')
413
+ })
414
+ })
415
+
416
+ describe('[(prop)rounded]', () => {
417
+ test('is defined correctly', () => {
418
+ expect(QBtn.props.rounded).toBeDefined()
419
+ })
420
+
421
+ test('type Boolean has effect', async () => {
422
+ const wrapper = mount(QBtn)
423
+ const target = wrapper.get('.q-btn')
424
+
425
+ expect(
426
+ target.classes()
427
+ ).not.toContain('q-btn--rounded')
428
+
429
+ await wrapper.setProps({ rounded: true })
430
+ await flushPromises()
431
+
432
+ expect(
433
+ target.classes()
434
+ ).toContain('q-btn--rounded')
435
+
436
+ expect(
437
+ target.$computedStyle('border-radius')
438
+ ).toBe('28px')
439
+ })
440
+ })
441
+
442
+ describe('[(prop)push]', () => {
443
+ test('is defined correctly', () => {
444
+ expect(QBtn.props.push).toBeDefined()
445
+ })
446
+
447
+ test('type Boolean has effect', async () => {
448
+ const wrapper = mount(QBtn)
449
+ const target = wrapper.get('.q-btn')
450
+
451
+ expect(
452
+ target.classes()
453
+ ).not.toContain('q-btn--push')
454
+
455
+ await wrapper.setProps({ push: true })
456
+ await flushPromises()
457
+
458
+ expect(
459
+ target.classes()
460
+ ).toContain('q-btn--push')
461
+
462
+ expect(
463
+ target.$computedStyle('border-radius')
464
+ ).toBe('7px')
465
+
466
+ expect(
467
+ target.$computedStyle('transition')
468
+ ).toBeDefined()
469
+ })
470
+ })
471
+
472
+ describe('[(prop)square]', () => {
473
+ test('is defined correctly', () => {
474
+ expect(QBtn.props.square).toBeDefined()
475
+ })
476
+
477
+ test('type Boolean has effect', async () => {
478
+ const wrapper = mount(QBtn)
479
+ const target = wrapper.get('.q-btn')
480
+
481
+ expect(
482
+ target.classes()
483
+ ).not.toContain('q-btn--square')
484
+
485
+ await wrapper.setProps({ square: true })
486
+ await flushPromises()
487
+
488
+ expect(
489
+ target.classes()
490
+ ).toContain('q-btn--square')
491
+
492
+ expect(
493
+ target.$computedStyle('border-radius')
494
+ ).toBe('0')
495
+ })
496
+ })
497
+
498
+ describe('[(prop)glossy]', () => {
499
+ test('is defined correctly', () => {
500
+ expect(QBtn.props.glossy).toBeDefined()
501
+ })
502
+
503
+ test('type Boolean has effect', async () => {
504
+ const wrapper = mount(QBtn)
505
+ const target = wrapper.get('.q-btn')
506
+
507
+ expect(
508
+ target.classes()
509
+ ).not.toContain('glossy')
510
+
511
+ await wrapper.setProps({ glossy: true })
512
+ await flushPromises()
513
+
514
+ expect(
515
+ target.classes()
516
+ ).toContain('glossy')
517
+ })
518
+ })
519
+
520
+ describe('[(prop)fab]', () => {
521
+ test('is defined correctly', () => {
522
+ expect(QBtn.props.fab).toBeDefined()
523
+ })
524
+
525
+ test('type Boolean has effect', async () => {
526
+ const wrapper = mount(QBtn)
527
+ const target = wrapper.get('.q-btn')
528
+
529
+ expect(
530
+ target.classes()
531
+ ).not.toContain('q-btn--fab')
532
+
533
+ await wrapper.setProps({ fab: true })
534
+ await flushPromises()
535
+
536
+ expect(
537
+ target.classes()
538
+ ).toContain('q-btn--fab')
539
+ })
540
+ })
541
+
542
+ describe('[(prop)fab-mini]', () => {
543
+ test('is defined correctly', () => {
544
+ expect(QBtn.props.fabMini).toBeDefined()
545
+ })
546
+
547
+ test('type Boolean has effect', async () => {
548
+ const wrapper = mount(QBtn)
549
+ const target = wrapper.get('.q-btn')
550
+
551
+ expect(
552
+ target.classes()
553
+ ).not.toContain('q-btn--fab-mini')
554
+
555
+ await wrapper.setProps({ fabMini: true })
556
+ await flushPromises()
557
+
558
+ expect(
559
+ target.classes()
560
+ ).toContain('q-btn--fab-mini')
561
+ })
562
+ })
563
+
564
+ describe('[(prop)padding]', () => {
565
+ test('is defined correctly', () => {
566
+ expect(QBtn.props.padding).toBeDefined()
567
+ })
568
+
569
+ test.each([
570
+ [ 'pixels; single value', '50px' ],
571
+ [ 'pixels; multiple values', '50px 100px' ]
572
+ ])('type String has effect (%s)', async (_, propVal) => {
573
+ const wrapper = mount(QBtn)
574
+ const target = wrapper.get('.q-btn')
575
+
576
+ expect(
577
+ target.$style('padding')
578
+ ).not.toBe(propVal)
579
+
580
+ await wrapper.setProps({ padding: propVal })
581
+ await flushPromises()
582
+
583
+ expect(
584
+ target.$style('padding')
585
+ ).toBe(propVal)
586
+ })
587
+
588
+ test('type String has effect (as "xs")', async () => {
589
+ const wrapper = mount(QBtn)
590
+ const target = wrapper.get('.q-btn')
591
+
592
+ expect(
593
+ target.$style('padding')
594
+ ).not.toBe(`${ btnPadding.xs }px`)
595
+
596
+ await wrapper.setProps({ padding: 'xs' })
597
+ await flushPromises()
598
+
599
+ expect(
600
+ target.$style('padding')
601
+ ).toBe(`${ btnPadding.xs }px`)
602
+ })
603
+
604
+ test('type String has effect (as "xs xl")', async () => {
605
+ const wrapper = mount(QBtn)
606
+ const target = wrapper.get('.q-btn')
607
+
608
+ expect(
609
+ target.$style('padding')
610
+ ).not.toBe(`${ btnPadding.xs }px ${ btnPadding.xl }px`)
611
+
612
+ await wrapper.setProps({ padding: 'xs xl' })
613
+ await flushPromises()
614
+
615
+ expect(
616
+ target.$style('padding')
617
+ ).toBe(`${ btnPadding.xs }px ${ btnPadding.xl }px`)
618
+ })
619
+
620
+ test('padding "0" is applied correctly', async () => {
621
+ const wrapper = mount(QBtn)
622
+ const target = wrapper.get('.q-btn')
623
+
624
+ expect(
625
+ target.$style('min-width')
626
+ ).not.toBe('0')
627
+
628
+ expect(
629
+ target.$style('min-height')
630
+ ).not.toBe('0')
631
+
632
+ await wrapper.setProps({ padding: 'xs xl' })
633
+ await flushPromises()
634
+
635
+ expect(
636
+ target.$style('min-width')
637
+ ).toBe('0')
638
+
639
+ expect(
640
+ target.$style('min-height')
641
+ ).toBe('0')
642
+ })
643
+ })
644
+
645
+ describe('[(prop)color]', () => {
646
+ test('is defined correctly', () => {
647
+ expect(QBtn.props.color).toBeDefined()
648
+ })
649
+
650
+ test('(default design) is applied correctly', async () => {
651
+ const propVal = 'red'
652
+ const wrapper = mount(QBtn)
653
+ const target = wrapper.get('.q-btn')
654
+
655
+ let cls = target.classes()
656
+ expect(cls).not.toContain('bg-red')
657
+ expect(cls).not.toContain('text-white')
658
+
659
+ await wrapper.setProps({ color: propVal })
660
+ await flushPromises()
661
+
662
+ cls = target.classes()
663
+ expect(cls).toContain('bg-red')
664
+ expect(cls).toContain('text-white')
665
+ })
666
+
667
+ test.each([
668
+ [ 'push' ],
669
+ [ 'unelevated' ]
670
+ ])('(design "%s") is applied correctly', async designProp => {
671
+ const wrapper = mount(QBtn)
672
+ const target = wrapper.get('.q-btn')
673
+
674
+ let cls = target.classes()
675
+ expect(cls).not.toContain('bg-red')
676
+ expect(cls).not.toContain('text-white')
677
+
678
+ await wrapper.setProps({
679
+ color: 'red',
680
+ [ designProp ]: true
681
+ })
682
+ await flushPromises()
683
+
684
+ cls = target.classes()
685
+ expect(cls).toContain('bg-red')
686
+ expect(cls).toContain('text-white')
687
+ })
688
+
689
+ test.each([
690
+ [ 'flat' ],
691
+ [ 'outline' ]
692
+ ])('(design "%s") is applied correctly', async designProp => {
693
+ const wrapper = mount(QBtn)
694
+ const target = wrapper.get('.q-btn')
695
+
696
+ let cls = target.classes()
697
+ expect(cls).not.toContain('text-red')
698
+ expect(cls).not.toContain('bg-red')
699
+
700
+ await wrapper.setProps({
701
+ color: 'red',
702
+ [ designProp ]: true
703
+ })
704
+ await flushPromises()
705
+
706
+ cls = target.classes()
707
+ expect(cls).toContain('text-red')
708
+ expect(cls).not.toContain('bg-red')
709
+ })
710
+ })
711
+
712
+ describe('[(prop)text-color]', () => {
713
+ test('is defined correctly', () => {
714
+ expect(QBtn.props.textColor).toBeDefined()
715
+ })
716
+
717
+ test('is applied correctly with no "color" prop', async () => {
718
+ const wrapper = mount(QBtn)
719
+ const target = wrapper.get('.q-btn')
720
+
721
+ let cls = target.classes()
722
+ expect(cls).not.toContain('text-red')
723
+ expect(cls).not.toContain('bg-red')
724
+
725
+ await wrapper.setProps({ textColor: 'red' })
726
+ await flushPromises()
727
+
728
+ cls = target.classes()
729
+ expect(cls).toContain('text-red')
730
+ expect(cls).not.toContain('bg-red')
731
+ })
732
+
733
+ test('(default design + color) is applied correctly', async () => {
734
+ const wrapper = mount(QBtn)
735
+ const target = wrapper.get('.q-btn')
736
+
737
+ let cls = target.classes()
738
+
739
+ expect(cls).not.toContain('bg-red')
740
+ expect(cls).not.toContain('text-red')
741
+ expect(cls).not.toContain('bg-blue')
742
+ expect(cls).not.toContain('text-blue')
743
+
744
+ await wrapper.setProps({
745
+ color: 'red',
746
+ textColor: 'blue'
747
+ })
748
+ await flushPromises()
749
+
750
+ cls = target.classes()
751
+
752
+ expect(cls).toContain('bg-red')
753
+ expect(cls).toContain('text-blue')
754
+
755
+ expect(cls).not.toContain('text-red')
756
+ expect(cls).not.toContain('bg-blue')
757
+ })
758
+
759
+ test.each([
760
+ [ 'push' ],
761
+ [ 'unelevated' ]
762
+ ])('(design "%s" + color) is applied correctly', async designProp => {
763
+ const wrapper = mount(QBtn)
764
+ const target = wrapper.get('.q-btn')
765
+
766
+ let cls = target.classes()
767
+
768
+ expect(cls).not.toContain('bg-red')
769
+ expect(cls).not.toContain('text-red')
770
+ expect(cls).not.toContain('bg-blue')
771
+ expect(cls).not.toContain('text-blue')
772
+
773
+ await wrapper.setProps({
774
+ color: 'red',
775
+ textColor: 'blue',
776
+ [ designProp ]: true
777
+ })
778
+ await flushPromises()
779
+
780
+ cls = target.classes()
781
+
782
+ expect(cls).toContain('bg-red')
783
+ expect(cls).toContain('text-blue')
784
+
785
+ expect(cls).not.toContain('text-red')
786
+ expect(cls).not.toContain('bg-blue')
787
+ })
788
+
789
+ test.each([
790
+ [ 'flat' ],
791
+ [ 'outline' ]
792
+ ])('(design "%s" + color) is applied correctly', async designProp => {
793
+ const wrapper = mount(QBtn)
794
+ const target = wrapper.get('.q-btn')
795
+
796
+ let cls = target.classes()
797
+
798
+ expect(cls).not.toContain('text-blue')
799
+ expect(cls).not.toContain('text-red')
800
+ expect(cls).not.toContain('bg-red')
801
+ expect(cls).not.toContain('bg-blue')
802
+
803
+ await wrapper.setProps({
804
+ color: 'red',
805
+ textColor: 'blue',
806
+ [ designProp ]: true
807
+ })
808
+ await flushPromises()
809
+
810
+ cls = target.classes()
811
+
812
+ expect(cls).toContain('text-blue')
813
+
814
+ expect(cls).not.toContain('text-red')
815
+ expect(cls).not.toContain('bg-red')
816
+ expect(cls).not.toContain('bg-blue')
817
+ })
818
+ })
819
+
820
+ describe('[(prop)no-caps]', () => {
821
+ test('is defined correctly', () => {
822
+ expect(QBtn.props.noCaps).toBeDefined()
823
+ })
824
+
825
+ test('type Boolean has effect', async () => {
826
+ const wrapper = mount(QBtn)
827
+ const target = wrapper.get('.q-btn')
828
+
829
+ expect(
830
+ target.classes()
831
+ ).not.toContain('q-btn--no-uppercase')
832
+
833
+ await wrapper.setProps({ noCaps: true })
834
+ await flushPromises()
835
+
836
+ expect(
837
+ target.classes()
838
+ ).toContain('q-btn--no-uppercase')
839
+
840
+ expect(
841
+ target.$computedStyle('text-transform')
842
+ ).toBe('none')
843
+ })
844
+ })
845
+
846
+ describe('[(prop)no-wrap]', () => {
847
+ test('is defined correctly', () => {
848
+ expect(QBtn.props.noWrap).toBeDefined()
849
+ })
850
+
851
+ test('type Boolean has effect', async () => {
852
+ const wrapper = mount(QBtn)
853
+
854
+ let cls = wrapper.get('.q-btn__content').classes()
855
+ expect(cls).not.toContain('no-wrap')
856
+ expect(cls).not.toContain('text-no-wrap')
857
+
858
+ await wrapper.setProps({ noWrap: true })
859
+ await flushPromises()
860
+
861
+ cls = wrapper.get('.q-btn__content').classes()
862
+ expect(cls).toContain('no-wrap')
863
+ expect(cls).toContain('text-no-wrap')
864
+ })
865
+ })
866
+
867
+ describe('[(prop)dense]', () => {
868
+ test('is defined correctly', () => {
869
+ expect(QBtn.props.dense).toBeDefined()
870
+ })
871
+
872
+ test('type Boolean has effect', async () => {
873
+ const wrapper = mount(QBtn)
874
+ const target = wrapper.get('.q-btn')
875
+
876
+ expect(
877
+ target.classes()
878
+ ).not.toContain('q-btn--dense')
879
+
880
+ await wrapper.setProps({ dense: true })
881
+ await flushPromises()
882
+
883
+ expect(
884
+ target.classes()
885
+ ).toContain('q-btn--dense')
886
+ })
887
+ })
888
+
889
+ describe('[(prop)ripple]', () => {
890
+ test('is defined correctly', () => {
891
+ expect(QBtn.props.ripple).toBeDefined()
892
+ })
893
+
894
+ test('type Boolean has effect', async () => {
895
+ const wrapper = mount(QBtn)
896
+
897
+ expect(
898
+ wrapper.find('.q-ripple')
899
+ .exists()
900
+ ).toBe(false)
901
+
902
+ await wrapper.setProps({ ripple: true })
903
+ await flushPromises()
904
+
905
+ await wrapper.trigger('click')
906
+
907
+ expect(
908
+ wrapper.find('.q-ripple')
909
+ .exists()
910
+ ).toBe(true)
911
+ })
912
+
913
+ test('type Object has effect', async () => {
914
+ const propVal = { center: true, color: 'teal', keyCodes: [] }
915
+ const wrapper = mount(QBtn)
916
+
917
+ expect(
918
+ wrapper.find('.q-ripple')
919
+ .exists()
920
+ ).toBe(false)
921
+
922
+ await wrapper.setProps({ ripple: propVal })
923
+ await flushPromises()
924
+
925
+ await wrapper.trigger('click')
926
+
927
+ expect(
928
+ wrapper.find('.q-ripple')
929
+ .exists()
930
+ ).toBe(true)
931
+ })
932
+ })
933
+
934
+ describe('[(prop)tabindex]', () => {
935
+ test('is defined correctly', () => {
936
+ expect(QBtn.props.tabindex).toBeDefined()
937
+ })
938
+
939
+ test.each([
940
+ [ 'Number', 100 ],
941
+ [ 'String', '100' ]
942
+ ])('type %s has effect', async (_, propVal) => {
943
+ const wrapper = mount(QBtn)
944
+
945
+ expect(
946
+ wrapper.attributes('tabindex')
947
+ ).not.toBe('' + propVal)
948
+
949
+ await wrapper.setProps({ tabindex: propVal })
950
+ await flushPromises()
951
+
952
+ expect(
953
+ wrapper.attributes('tabindex')
954
+ ).toBe('' + propVal)
955
+
956
+ // we'll test tabindex + disable
957
+ await wrapper.setProps({ disable: true })
958
+ await flushPromises()
959
+
960
+ expect(
961
+ wrapper.attributes('tabindex')
962
+ ).toBe('-1')
963
+
964
+ // we'll now test loading + disable
965
+ await wrapper.setProps({
966
+ disable: false,
967
+ loading: true
968
+ })
969
+ await flushPromises()
970
+
971
+ expect(
972
+ wrapper.attributes('tabindex')
973
+ ).toBe('-1')
974
+ })
975
+ })
976
+
977
+ describe('[(prop)align]', () => {
978
+ test('is defined correctly', () => {
979
+ expect(QBtn.props.align).toBeDefined()
980
+ })
981
+
982
+ test.each([
983
+ [ 'left' ],
984
+ [ 'center' ],
985
+ [ 'right' ],
986
+ [ 'between' ],
987
+ [ 'around' ],
988
+ [ 'evenly' ]
989
+ ])('value "%s" has effect', async propVal => {
990
+ const wrapper = mount(QBtn)
991
+ const target = wrapper.get('.q-btn__content')
992
+
993
+ if (propVal !== 'center') {
994
+ // the default value
995
+ expect(
996
+ target.classes()
997
+ ).not.toContain(`justify-${ alignMap[ propVal ] }`)
998
+ }
999
+
1000
+ await wrapper.setProps({ align: propVal })
1001
+ await flushPromises()
1002
+
1003
+ expect(
1004
+ target.classes()
1005
+ ).toContain(`justify-${ alignMap[ propVal ] }`)
1006
+ })
1007
+ })
1008
+
1009
+ describe('[(prop)stack]', () => {
1010
+ test('is defined correctly', () => {
1011
+ expect(QBtn.props.stack).toBeDefined()
1012
+ })
1013
+
1014
+ test('type Boolean has effect', async () => {
1015
+ const wrapper = mount(QBtn)
1016
+ const target = wrapper.get('.q-btn__content')
1017
+
1018
+ expect(
1019
+ target.classes()
1020
+ ).toContain('row')
1021
+
1022
+ await wrapper.setProps({ stack: true })
1023
+ await flushPromises()
1024
+
1025
+ expect(
1026
+ target.classes()
1027
+ ).toContain('column')
1028
+ })
1029
+ })
1030
+
1031
+ describe('[(prop)stretch]', () => {
1032
+ test('is defined correctly', () => {
1033
+ expect(QBtn.props.stretch).toBeDefined()
1034
+ })
1035
+
1036
+ test('type Boolean has effect', async () => {
1037
+ const wrapper = mount(QBtn)
1038
+ const target = wrapper.get('.q-btn')
1039
+
1040
+ expect(
1041
+ target.classes()
1042
+ ).not.toContain('self-stretch')
1043
+
1044
+ await wrapper.setProps({ stretch: true })
1045
+ await flushPromises()
1046
+
1047
+ expect(
1048
+ target.classes()
1049
+ ).toContain('self-stretch')
1050
+ })
1051
+ })
1052
+
1053
+ describe('[(prop)loading]', () => {
1054
+ test('is defined correctly', () => {
1055
+ expect(QBtn.props.loading).toBeDefined()
1056
+ })
1057
+
1058
+ test('type Boolean has effect', async () => {
1059
+ const wrapper = mount(QBtn)
1060
+ const target = wrapper.get('.q-btn')
1061
+
1062
+ expect(
1063
+ target.attributes('role')
1064
+ ).not.toBe('progressbar')
1065
+
1066
+ expect(
1067
+ target.attributes('aria-valuenow')
1068
+ ).toBeUndefined()
1069
+
1070
+ await wrapper.setProps({ loading: true })
1071
+ await flushPromises()
1072
+
1073
+ expect(
1074
+ target.attributes('role')
1075
+ ).not.toBe('progressbar')
1076
+
1077
+ expect(
1078
+ target.attributes('aria-valuenow')
1079
+ ).toBeUndefined()
1080
+
1081
+ expect(
1082
+ wrapper.find('.q-spinner')
1083
+ .exists()
1084
+ ).toBe(true)
1085
+
1086
+ expect(
1087
+ wrapper.get('.q-btn__content')
1088
+ .classes()
1089
+ ).toContain('q-btn__content--hidden')
1090
+
1091
+ await wrapper.setProps({ percentage: 50 })
1092
+ await flushPromises()
1093
+
1094
+ expect(
1095
+ target.attributes('role')
1096
+ ).toBe('progressbar')
1097
+
1098
+ expect(
1099
+ target.attributes('aria-valuenow')
1100
+ ).toBe('50')
1101
+ })
1102
+
1103
+ test('type null has effect', async () => {
1104
+ const wrapper = mount(QBtn)
1105
+ const target = wrapper.get('.q-btn')
1106
+
1107
+ expect(
1108
+ target.attributes('role')
1109
+ ).not.toBe('progressbar')
1110
+
1111
+ expect(
1112
+ target.attributes('aria-valuenow')
1113
+ ).toBeUndefined()
1114
+
1115
+ await wrapper.setProps({ loading: null })
1116
+ await flushPromises()
1117
+
1118
+ expect(
1119
+ target.attributes('role')
1120
+ ).not.toBe('progressbar')
1121
+
1122
+ expect(
1123
+ target.attributes('aria-valuenow')
1124
+ ).toBeUndefined()
1125
+
1126
+ expect(
1127
+ wrapper.get('.q-btn__content')
1128
+ .classes()
1129
+ ).not.toContain('q-btn__content--hidden')
1130
+
1131
+ expect(
1132
+ wrapper.find('.q-spinner')
1133
+ .exists()
1134
+ ).toBe(false)
1135
+ })
1136
+ })
1137
+
1138
+ describe('[(prop)disable]', () => {
1139
+ test('is defined correctly', () => {
1140
+ expect(QBtn.props.disable).toBeDefined()
1141
+ })
1142
+
1143
+ test('type Boolean has effect', async () => {
1144
+ const wrapper = mount(QBtn)
1145
+ const target = wrapper.get('.q-btn')
1146
+
1147
+ expect(
1148
+ target.classes()
1149
+ ).not.toContain('disabled')
1150
+
1151
+ expect(
1152
+ target.attributes('aria-disabled')
1153
+ ).not.toBe('true')
1154
+
1155
+ await wrapper.setProps({ disable: true })
1156
+ await flushPromises()
1157
+
1158
+ expect(
1159
+ target.classes()
1160
+ ).toContain('disabled')
1161
+
1162
+ expect(
1163
+ target.attributes('aria-disabled')
1164
+ ).toBe('true')
1165
+ })
1166
+
1167
+ test('link + disable', async () => {
1168
+ const testRoute = '/home'
1169
+ const router = await getRouter(testRoute)
1170
+
1171
+ const wrapper = mount(QBtn, {
1172
+ props: {
1173
+ disable: true,
1174
+ to: testRoute
1175
+ },
1176
+ global: {
1177
+ plugins: [ router ]
1178
+ }
1179
+ })
1180
+
1181
+ expect(
1182
+ wrapper.find('a').exists()
1183
+ ).toBe(false)
1184
+
1185
+ await wrapper.trigger('click')
1186
+ await flushPromises()
1187
+
1188
+ expect(
1189
+ router.currentRoute.value.path
1190
+ ).not.toBe(testRoute)
1191
+ })
1192
+
1193
+ test('loading + disable', async () => {
1194
+ const testRoute = '/home'
1195
+ const router = await getRouter(testRoute)
1196
+
1197
+ const wrapper = mount(QBtn, {
1198
+ props: {
1199
+ loading: true,
1200
+ to: testRoute
1201
+ },
1202
+ global: {
1203
+ plugins: [ router ]
1204
+ }
1205
+ })
1206
+
1207
+ await wrapper.trigger('click')
1208
+ await flushPromises()
1209
+
1210
+ expect(
1211
+ router.currentRoute.value.path
1212
+ ).not.toBe(testRoute)
1213
+ })
1214
+ })
1215
+
1216
+ describe('[(prop)round]', () => {
1217
+ test('is defined correctly', () => {
1218
+ expect(QBtn.props.round).toBeDefined()
1219
+ })
1220
+
1221
+ test('type Boolean has effect', async () => {
1222
+ const wrapper = mount(QBtn)
1223
+ const target = wrapper.get('.q-btn')
1224
+
1225
+ expect(
1226
+ target.classes()
1227
+ ).toContain('q-btn--rectangle')
1228
+
1229
+ await wrapper.setProps({ round: true })
1230
+ await flushPromises()
1231
+
1232
+ expect(
1233
+ target.classes()
1234
+ ).toContain('q-btn--round')
1235
+
1236
+ expect(
1237
+ target.$computedStyle('border-radius')
1238
+ ).toBe('50%')
1239
+ })
1240
+ })
1241
+
1242
+ describe('[(prop)percentage]', () => {
1243
+ test('is defined correctly', () => {
1244
+ expect(QBtn.props.percentage).toBeDefined()
1245
+ })
1246
+
1247
+ test('type Number has effect', async () => {
1248
+ const propVal = 58
1249
+ const wrapper = mount(QBtn)
1250
+
1251
+ expect(
1252
+ wrapper.find('.q-btn__progress')
1253
+ .exists()
1254
+ ).toBe(false)
1255
+
1256
+ expect(
1257
+ wrapper.get('.q-btn')
1258
+ .attributes('aria-valuenow')
1259
+ ).toBeUndefined()
1260
+
1261
+ await wrapper.setProps({ percentage: propVal })
1262
+ await flushPromises()
1263
+
1264
+ expect(
1265
+ wrapper.find('.q-btn__progress')
1266
+ .exists()
1267
+ ).toBe(false)
1268
+
1269
+ expect(
1270
+ wrapper.get('.q-btn')
1271
+ .attributes('aria-valuenow')
1272
+ ).toBeUndefined()
1273
+
1274
+ await wrapper.setProps({ loading: true })
1275
+ await flushPromises()
1276
+
1277
+ expect(
1278
+ wrapper.find('.q-btn__progress')
1279
+ .exists()
1280
+ ).toBe(true)
1281
+
1282
+ expect(
1283
+ wrapper.get('.q-btn__progress-indicator')
1284
+ .$computedStyle('transform')
1285
+ ).toContain(`${ 100 - propVal }%`)
1286
+
1287
+ expect(
1288
+ wrapper.find('.q-spinner')
1289
+ .exists()
1290
+ ).toBe(true)
1291
+
1292
+ expect(
1293
+ wrapper.get('.q-btn')
1294
+ .attributes('aria-valuenow')
1295
+ ).toBe('' + propVal)
1296
+ })
1297
+ })
1298
+
1299
+ describe('[(prop)dark-percentage]', () => {
1300
+ test('is defined correctly', () => {
1301
+ expect(QBtn.props.darkPercentage).toBeDefined()
1302
+ })
1303
+
1304
+ test('type Boolean has effect', async () => {
1305
+ const propVal = 58
1306
+ const wrapper = mount(QBtn)
1307
+
1308
+ expect(
1309
+ wrapper.get('.q-btn')
1310
+ .attributes('aria-valuenow')
1311
+ ).not.toBe('' + propVal)
1312
+
1313
+ expect(
1314
+ wrapper.find('.q-btn__progress')
1315
+ .exists()
1316
+ ).toBe(false)
1317
+
1318
+ await wrapper.setProps({
1319
+ percentage: propVal,
1320
+ loading: true,
1321
+ darkPercentage: true
1322
+ })
1323
+ await flushPromises()
1324
+
1325
+ expect(
1326
+ wrapper.get('.q-btn')
1327
+ .attributes('aria-valuenow')
1328
+ ).toBe('' + propVal)
1329
+
1330
+ expect(
1331
+ wrapper.get('.q-btn__progress')
1332
+ .classes()
1333
+ ).toContain('q-btn__progress--dark')
1334
+ })
1335
+ })
1336
+ })
1337
+
1338
+ describe('[Slots]', () => {
1339
+ describe('[(slot)default]', () => {
1340
+ test('renders the content', () => {
1341
+ const slotContent = 'some-slot-content'
1342
+ const wrapper = mount(QBtn, {
1343
+ slots: {
1344
+ default: () => slotContent
1345
+ }
1346
+ })
1347
+
1348
+ expect(wrapper.html()).toContain(slotContent)
1349
+ })
1350
+ })
1351
+
1352
+ describe('[(slot)loading]', () => {
1353
+ test('renders the content', async () => {
1354
+ const slotContent = 'some-slot-content'
1355
+ const wrapper = mount(QBtn, {
1356
+ slots: {
1357
+ loading: () => slotContent
1358
+ }
1359
+ })
1360
+
1361
+ expect(wrapper.html()).not.toContain(slotContent)
1362
+
1363
+ await wrapper.setProps({ loading: true })
1364
+ await flushPromises()
1365
+
1366
+ expect(wrapper.html()).toContain(slotContent)
1367
+ })
1368
+ })
1369
+ })
1370
+
1371
+ describe('[Events]', () => {
1372
+ describe('[(event)click]', () => {
1373
+ test('is defined correctly', () => {
1374
+ expect(
1375
+ QBtn.emits?.includes('click')
1376
+ ^ (QBtn.props?.onClick !== void 0)
1377
+ ).toBe(1)
1378
+ })
1379
+
1380
+ test('(with route) is emitting', async () => {
1381
+ const testRoute = '/home/dashboard'
1382
+ const router = await getRouter(testRoute)
1383
+
1384
+ const wrapper = mount(QBtn, {
1385
+ props: {
1386
+ to: testRoute
1387
+ },
1388
+ global: {
1389
+ plugins: [ router ]
1390
+ }
1391
+ })
1392
+
1393
+ await wrapper.trigger('click')
1394
+
1395
+ const eventList = wrapper.emitted()
1396
+ expect(eventList).toHaveProperty('click')
1397
+ expect(eventList.click).toHaveLength(1)
1398
+
1399
+ const [ evt, go ] = eventList.click[ 0 ]
1400
+ expect(evt).toBeInstanceOf(Event)
1401
+ expect(go).toBeTypeOf('function')
1402
+ })
1403
+
1404
+ test('(with route) does not navigates when prevented', async () => {
1405
+ const testRoute = '/home/dashboard'
1406
+ const router = await getRouter(testRoute)
1407
+
1408
+ const wrapper = mount(QBtn, {
1409
+ props: {
1410
+ to: testRoute,
1411
+ onClick: e => e.preventDefault()
1412
+ },
1413
+ global: {
1414
+ plugins: [ router ]
1415
+ }
1416
+ })
1417
+
1418
+ await wrapper.trigger('click')
1419
+ await flushPromises()
1420
+
1421
+ expect(
1422
+ router.currentRoute.value.path
1423
+ ).not.toBe(testRoute)
1424
+ })
1425
+
1426
+ test('(with route) can manually navigate by calling go()', async () => {
1427
+ const testRoute = '/home/dashboard'
1428
+ const router = await getRouter(testRoute)
1429
+
1430
+ const wrapper = mount(QBtn, {
1431
+ props: {
1432
+ to: testRoute,
1433
+ onClick: (e, go) => {
1434
+ e.preventDefault()
1435
+ go()
1436
+ }
1437
+ },
1438
+ global: {
1439
+ plugins: [ router ]
1440
+ }
1441
+ })
1442
+
1443
+ await wrapper.trigger('click')
1444
+ await flushPromises()
1445
+
1446
+ expect(
1447
+ router.currentRoute.value.path
1448
+ ).toBe(testRoute)
1449
+ })
1450
+
1451
+ test('is emitting', async () => {
1452
+ const wrapper = mount(QBtn)
1453
+
1454
+ await wrapper.trigger('click')
1455
+
1456
+ const eventList = wrapper.emitted()
1457
+ expect(eventList).toHaveProperty('click')
1458
+ expect(eventList.click).toHaveLength(1)
1459
+
1460
+ const [ evt, go ] = eventList.click[ 0 ]
1461
+ expect(evt).toBeInstanceOf(Event)
1462
+ expect(go).toBeUndefined()
1463
+ })
1464
+
1465
+ test('is NOT emitting when in loading state', async () => {
1466
+ const wrapper = mount(QBtn, {
1467
+ props: {
1468
+ loading: true
1469
+ }
1470
+ })
1471
+
1472
+ await wrapper.trigger('click')
1473
+
1474
+ const eventList = wrapper.emitted()
1475
+ expect(eventList).not.toHaveProperty('click')
1476
+ })
1477
+
1478
+ test('is NOT emitting when disabled', async () => {
1479
+ const wrapper = mount(QBtn, {
1480
+ props: {
1481
+ disable: true
1482
+ }
1483
+ })
1484
+
1485
+ await wrapper.trigger('click')
1486
+
1487
+ const eventList = wrapper.emitted()
1488
+ expect(eventList).not.toHaveProperty('click')
1489
+ })
1490
+ })
1491
+ })
1492
+
1493
+ describe('[Methods]', () => {
1494
+ describe('[(method)click]', () => {
1495
+ test('should be callable', () => {
1496
+ const event = new MouseEvent('click')
1497
+ const wrapper = mount(QBtn)
1498
+
1499
+ expect(
1500
+ wrapper.vm.click(event)
1501
+ ).toBeUndefined()
1502
+
1503
+ const eventList = wrapper.emitted()
1504
+ expect(eventList).toHaveProperty('click')
1505
+ expect(eventList.click).toHaveLength(1)
1506
+
1507
+ const [ evt, go ] = eventList.click[ 0 ]
1508
+ expect(evt).toBeInstanceOf(Event)
1509
+ expect(go).toBeUndefined()
1510
+ })
1511
+
1512
+ test('should not do anything when disabled', () => {
1513
+ const event = new MouseEvent('click')
1514
+ const wrapper = mount(QBtn, {
1515
+ props: {
1516
+ disable: true
1517
+ }
1518
+ })
1519
+
1520
+ expect(
1521
+ wrapper.vm.click(event)
1522
+ ).toBeUndefined()
1523
+
1524
+ const eventList = wrapper.emitted()
1525
+ expect(eventList).not.toHaveProperty('click')
1526
+ })
1527
+ })
1528
+ })
1529
+ })