quasar 2.15.2 → 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 (646) 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/Cookies.json +1 -1
  5. package/dist/api/Dark.json +1 -1
  6. package/dist/api/Dialog.json +1 -1
  7. package/dist/api/IconSet.json +1 -0
  8. package/dist/api/Lang.json +1 -1
  9. package/dist/api/Loading.json +1 -1
  10. package/dist/api/LoadingBar.json +1 -1
  11. package/dist/api/LocalStorage.json +1 -1
  12. package/dist/api/Morph.json +1 -1
  13. package/dist/api/Notify.json +1 -1
  14. package/dist/api/Platform.json +1 -1
  15. package/dist/api/QAjaxBar.json +1 -1
  16. package/dist/api/QBreadcrumbsEl.json +1 -1
  17. package/dist/api/QBtn.json +1 -1
  18. package/dist/api/QBtnDropdown.json +1 -1
  19. package/dist/api/QBtnToggle.json +1 -1
  20. package/dist/api/QCard.json +1 -1
  21. package/dist/api/QCardSection.json +1 -1
  22. package/dist/api/QCarousel.json +1 -1
  23. package/dist/api/QCarouselControl.json +1 -1
  24. package/dist/api/QCheckbox.json +1 -1
  25. package/dist/api/QChip.json +1 -1
  26. package/dist/api/QDate.json +1 -1
  27. package/dist/api/QDialog.json +1 -1
  28. package/dist/api/QDrawer.json +1 -1
  29. package/dist/api/QEditor.json +1 -1
  30. package/dist/api/QExpansionItem.json +1 -1
  31. package/dist/api/QFab.json +1 -1
  32. package/dist/api/QFabAction.json +1 -1
  33. package/dist/api/QField.json +1 -1
  34. package/dist/api/QFile.json +1 -1
  35. package/dist/api/QForm.json +1 -1
  36. package/dist/api/QFormChildMixin.json +1 -1
  37. package/dist/api/QIcon.json +1 -1
  38. package/dist/api/QInfiniteScroll.json +1 -1
  39. package/dist/api/QInput.json +1 -1
  40. package/dist/api/QIntersection.json +1 -1
  41. package/dist/api/QItem.json +1 -1
  42. package/dist/api/QList.json +1 -1
  43. package/dist/api/QMenu.json +1 -1
  44. package/dist/api/QNoSsr.json +1 -1
  45. package/dist/api/QOptionGroup.json +1 -1
  46. package/dist/api/QPageScroller.json +1 -1
  47. package/dist/api/QPageSticky.json +1 -1
  48. package/dist/api/QPagination.json +1 -1
  49. package/dist/api/QParallax.json +1 -1
  50. package/dist/api/QPopupEdit.json +1 -1
  51. package/dist/api/QPopupProxy.json +1 -1
  52. package/dist/api/QPullToRefresh.json +1 -1
  53. package/dist/api/QRadio.json +1 -1
  54. package/dist/api/QRating.json +1 -1
  55. package/dist/api/QResizeObserver.json +1 -1
  56. package/dist/api/QScrollArea.json +1 -1
  57. package/dist/api/QScrollObserver.json +1 -1
  58. package/dist/api/QSelect.json +1 -1
  59. package/dist/api/QSkeleton.json +1 -1
  60. package/dist/api/QSlideItem.json +1 -1
  61. package/dist/api/QSplitter.json +1 -1
  62. package/dist/api/QStepper.json +1 -1
  63. package/dist/api/QTabPanel.json +1 -1
  64. package/dist/api/QTabPanels.json +1 -1
  65. package/dist/api/QTable.json +1 -1
  66. package/dist/api/QTime.json +1 -1
  67. package/dist/api/QTimelineEntry.json +1 -1
  68. package/dist/api/QToggle.json +1 -1
  69. package/dist/api/QTooltip.json +1 -1
  70. package/dist/api/QTree.json +1 -1
  71. package/dist/api/QUploader.json +1 -1
  72. package/dist/api/QVirtualScroll.json +1 -1
  73. package/dist/api/Ripple.json +1 -1
  74. package/dist/api/Screen.json +1 -1
  75. package/dist/api/ScrollFire.json +1 -1
  76. package/dist/api/SessionStorage.json +1 -1
  77. package/dist/icon-set/bootstrap-icons.umd.prod.js +2 -2
  78. package/dist/icon-set/eva-icons.umd.prod.js +2 -2
  79. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +2 -2
  80. package/dist/icon-set/fontawesome-v5.umd.prod.js +2 -2
  81. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +2 -2
  82. package/dist/icon-set/fontawesome-v6.umd.prod.js +2 -2
  83. package/dist/icon-set/ionicons-v4.umd.prod.js +2 -2
  84. package/dist/icon-set/line-awesome.umd.prod.js +2 -2
  85. package/dist/icon-set/material-icons-outlined.umd.prod.js +2 -2
  86. package/dist/icon-set/material-icons-round.umd.prod.js +2 -2
  87. package/dist/icon-set/material-icons-sharp.umd.prod.js +2 -2
  88. package/dist/icon-set/material-icons.umd.prod.js +2 -2
  89. package/dist/icon-set/material-symbols-outlined.umd.prod.js +2 -2
  90. package/dist/icon-set/material-symbols-rounded.umd.prod.js +2 -2
  91. package/dist/icon-set/material-symbols-sharp.umd.prod.js +2 -2
  92. package/dist/icon-set/mdi-v3.umd.prod.js +2 -2
  93. package/dist/icon-set/mdi-v4.umd.prod.js +2 -2
  94. package/dist/icon-set/mdi-v5.umd.prod.js +2 -2
  95. package/dist/icon-set/mdi-v6.umd.prod.js +2 -2
  96. package/dist/icon-set/mdi-v7.umd.prod.js +2 -2
  97. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +2 -2
  98. package/dist/icon-set/svg-eva-icons.umd.prod.js +2 -2
  99. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +2 -2
  100. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +2 -2
  101. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +2 -2
  102. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +2 -2
  103. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +2 -2
  104. package/dist/icon-set/svg-line-awesome.umd.prod.js +2 -2
  105. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +2 -2
  106. package/dist/icon-set/svg-material-icons-round.umd.prod.js +2 -2
  107. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +2 -2
  108. package/dist/icon-set/svg-material-icons.umd.prod.js +2 -2
  109. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +2 -2
  110. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +2 -2
  111. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +2 -2
  112. package/dist/icon-set/svg-mdi-v6.umd.prod.js +2 -2
  113. package/dist/icon-set/svg-mdi-v7.umd.prod.js +2 -2
  114. package/dist/icon-set/svg-themify.umd.prod.js +2 -2
  115. package/dist/icon-set/themify.umd.prod.js +2 -2
  116. package/dist/lang/ar-TN.umd.prod.js +2 -2
  117. package/dist/lang/ar.umd.prod.js +2 -2
  118. package/dist/lang/az-Latn.umd.prod.js +2 -2
  119. package/dist/lang/bg.umd.prod.js +2 -2
  120. package/dist/lang/bn.umd.prod.js +2 -2
  121. package/dist/lang/ca.umd.prod.js +2 -2
  122. package/dist/lang/cs.umd.prod.js +2 -2
  123. package/dist/lang/da.umd.prod.js +2 -2
  124. package/dist/lang/de-CH.umd.prod.js +2 -2
  125. package/dist/lang/de-DE.umd.prod.js +2 -2
  126. package/dist/lang/de.umd.prod.js +2 -2
  127. package/dist/lang/el.umd.prod.js +2 -2
  128. package/dist/lang/en-GB.umd.prod.js +2 -2
  129. package/dist/lang/en-US.umd.prod.js +2 -2
  130. package/dist/lang/eo.umd.prod.js +2 -2
  131. package/dist/lang/es.umd.prod.js +2 -2
  132. package/dist/lang/et.umd.prod.js +2 -2
  133. package/dist/lang/eu.umd.prod.js +2 -2
  134. package/dist/lang/fa-IR.umd.prod.js +2 -2
  135. package/dist/lang/fa.umd.prod.js +2 -2
  136. package/dist/lang/fi.umd.prod.js +2 -2
  137. package/dist/lang/fr.umd.prod.js +2 -2
  138. package/dist/lang/gn.umd.prod.js +2 -2
  139. package/dist/lang/he.umd.prod.js +2 -2
  140. package/dist/lang/hi.umd.prod.js +2 -2
  141. package/dist/lang/hr.umd.prod.js +2 -2
  142. package/dist/lang/hu.umd.prod.js +2 -2
  143. package/dist/lang/id.umd.prod.js +2 -2
  144. package/dist/lang/is.umd.prod.js +2 -2
  145. package/dist/lang/it.umd.prod.js +2 -2
  146. package/dist/lang/ja.umd.prod.js +2 -2
  147. package/dist/lang/kk.umd.prod.js +2 -2
  148. package/dist/lang/km.umd.prod.js +2 -2
  149. package/dist/lang/ko-KR.umd.prod.js +2 -2
  150. package/dist/lang/kur-CKB.umd.prod.js +2 -2
  151. package/dist/lang/lt.umd.prod.js +2 -2
  152. package/dist/lang/lu.umd.prod.js +2 -2
  153. package/dist/lang/lv.umd.prod.js +2 -2
  154. package/dist/lang/mk.umd.prod.js +2 -2
  155. package/dist/lang/ml.umd.prod.js +2 -2
  156. package/dist/lang/mm.umd.prod.js +2 -2
  157. package/dist/lang/ms-MY.umd.prod.js +2 -2
  158. package/dist/lang/ms.umd.prod.js +2 -2
  159. package/dist/lang/my.umd.prod.js +2 -2
  160. package/dist/lang/nb-NO.umd.prod.js +2 -2
  161. package/dist/lang/nl.umd.prod.js +2 -2
  162. package/dist/lang/pl.umd.prod.js +2 -2
  163. package/dist/lang/pt-BR.umd.prod.js +2 -2
  164. package/dist/lang/pt.umd.prod.js +2 -2
  165. package/dist/lang/ro.umd.prod.js +2 -2
  166. package/dist/lang/ru.umd.prod.js +2 -2
  167. package/dist/lang/sk.umd.prod.js +2 -2
  168. package/dist/lang/sl.umd.prod.js +2 -2
  169. package/dist/lang/sm.umd.prod.js +2 -2
  170. package/dist/lang/sr-CYR.umd.prod.js +2 -2
  171. package/dist/lang/sr.umd.prod.js +2 -2
  172. package/dist/lang/sv.umd.prod.js +2 -2
  173. package/dist/lang/ta.umd.prod.js +2 -2
  174. package/dist/lang/th.umd.prod.js +2 -2
  175. package/dist/lang/tl.umd.prod.js +2 -2
  176. package/dist/lang/tr.umd.prod.js +2 -2
  177. package/dist/lang/ug.umd.prod.js +2 -2
  178. package/dist/lang/uk.umd.prod.js +2 -2
  179. package/dist/lang/uz-Cyrl.umd.prod.js +2 -2
  180. package/dist/lang/uz-Latn.umd.prod.js +2 -2
  181. package/dist/lang/vi.umd.prod.js +2 -2
  182. package/dist/lang/zh-CN.umd.prod.js +2 -2
  183. package/dist/lang/zh-TW.umd.prod.js +2 -2
  184. package/dist/quasar.addon.prod.css +1 -1
  185. package/dist/quasar.addon.rtl.prod.css +1 -1
  186. package/dist/quasar.cjs.prod.js +12 -12
  187. package/dist/quasar.esm.js +567 -520
  188. package/dist/quasar.esm.prod.js +17 -17
  189. package/dist/quasar.prod.css +1 -1
  190. package/dist/quasar.rtl.prod.css +1 -1
  191. package/dist/quasar.sass +1 -1
  192. package/dist/quasar.umd.js +554 -506
  193. package/dist/quasar.umd.prod.js +22 -22
  194. package/dist/transforms/api-list.json +1 -1
  195. package/dist/transforms/import-map.json +1 -1
  196. package/dist/types/config.d.ts +3 -3
  197. package/dist/types/globals.d.ts +1 -1
  198. package/dist/types/index.d.ts +1921 -102
  199. package/dist/vetur/quasar-attributes.json +1 -1
  200. package/dist/vetur/quasar-tags.json +1 -1
  201. package/dist/web-types/web-types.json +1 -1
  202. package/lang/uk.js +1 -1
  203. package/lang/uk.mjs +1 -1
  204. package/package.json +18 -17
  205. package/src/api.extends.json +7 -5
  206. package/src/components/ajax-bar/QAjaxBar.js +2 -2
  207. package/src/components/ajax-bar/QAjaxBar.json +1 -0
  208. package/src/components/avatar/QAvatar.js +3 -3
  209. package/src/components/avatar/QAvatar.json +1 -1
  210. package/src/components/avatar/QAvatar.test.js +169 -83
  211. package/src/components/badge/QBadge.js +2 -2
  212. package/src/components/badge/QBadge.test.js +200 -100
  213. package/src/components/banner/QBanner.js +3 -3
  214. package/src/components/banner/QBanner.test.js +88 -50
  215. package/src/components/bar/QBar.js +3 -3
  216. package/src/components/bar/QBar.test.js +44 -19
  217. package/src/components/breadcrumbs/QBreadcrumbs.js +6 -4
  218. package/src/components/breadcrumbs/QBreadcrumbs.test.js +134 -59
  219. package/src/components/breadcrumbs/QBreadcrumbsEl.js +3 -3
  220. package/src/components/breadcrumbs/QBreadcrumbsEl.json +1 -1
  221. package/src/components/breadcrumbs/QBreadcrumbsEl.test.js +491 -61
  222. package/src/components/btn/QBtn.js +11 -5
  223. package/src/components/btn/QBtn.json +2 -1
  224. package/src/components/btn/QBtn.test.js +1391 -212
  225. package/src/components/btn/use-btn.js +8 -6
  226. package/src/components/btn/use-btn.json +1 -1
  227. package/src/components/btn/use-btn.test.js +86 -542
  228. package/src/components/btn-dropdown/QBtnDropdown.js +9 -10
  229. package/src/components/btn-dropdown/QBtnDropdown.json +3 -3
  230. package/src/components/btn-group/QBtnGroup.js +2 -2
  231. package/src/components/btn-toggle/QBtnToggle.js +3 -3
  232. package/src/components/btn-toggle/QBtnToggle.json +2 -2
  233. package/src/components/card/QCard.js +3 -3
  234. package/src/components/card/QCardActions.js +3 -3
  235. package/src/components/card/QCardSection.js +2 -2
  236. package/src/components/carousel/QCarousel.js +6 -6
  237. package/src/components/carousel/QCarousel.json +1 -1
  238. package/src/components/carousel/QCarouselControl.js +2 -2
  239. package/src/components/carousel/QCarouselControl.json +1 -1
  240. package/src/components/carousel/QCarouselSlide.js +3 -3
  241. package/src/components/carousel/QCarouselSlide.json +1 -1
  242. package/src/components/chat/QChatMessage.js +2 -2
  243. package/src/components/checkbox/QCheckbox.js +1 -1
  244. package/src/components/checkbox/use-checkbox.js +8 -8
  245. package/src/components/checkbox/use-checkbox.json +5 -3
  246. package/src/components/chip/QChip.js +6 -5
  247. package/src/components/chip/QChip.json +4 -0
  248. package/src/components/chip/QChip.test.js +685 -317
  249. package/src/components/circular-progress/QCircularProgress.js +5 -5
  250. package/src/components/circular-progress/QCircularProgress.json +1 -1
  251. package/src/components/circular-progress/{use-circular-progress.js → circular-progress.js} +1 -1
  252. package/src/components/circular-progress/circular-progress.test.js +14 -0
  253. package/src/components/color/QColor.js +10 -10
  254. package/src/components/color/QColor.json +1 -1
  255. package/src/components/date/QDate.js +9 -9
  256. package/src/components/date/QDate.json +17 -11
  257. package/src/components/date/use-datetime.js +2 -2
  258. package/src/components/date/use-datetime.json +6 -6
  259. package/src/components/dialog/QDialog.js +33 -22
  260. package/src/components/dialog/QDialog.json +5 -3
  261. package/src/components/dialog/QDialog.test.js +1094 -220
  262. package/src/components/drawer/QDrawer.js +9 -9
  263. package/src/components/drawer/QDrawer.json +7 -4
  264. package/src/components/editor/QEditor.js +9 -9
  265. package/src/components/editor/QEditor.json +11 -5
  266. package/src/components/editor/editor-caret.js +1 -1
  267. package/src/components/editor/editor-utils.js +3 -3
  268. package/src/components/expansion-item/QExpansionItem.js +9 -9
  269. package/src/components/expansion-item/QExpansionItem.json +2 -2
  270. package/src/components/fab/QFab.js +5 -5
  271. package/src/components/fab/QFab.json +1 -1
  272. package/src/components/fab/QFabAction.js +4 -4
  273. package/src/components/fab/QFabAction.json +2 -1
  274. package/src/components/fab/use-fab.json +1 -1
  275. package/src/components/field/QField.js +2 -2
  276. package/src/components/field/QField.json +7 -3
  277. package/src/components/file/QFile.js +9 -9
  278. package/src/components/file/QFile.json +11 -4
  279. package/src/components/footer/QFooter.js +3 -3
  280. package/src/components/form/QForm.js +6 -6
  281. package/src/components/form/QForm.json +11 -4
  282. package/src/components/form/QFormChildMixin.js +2 -2
  283. package/src/components/form/QFormChildMixin.json +4 -1
  284. package/src/components/header/QHeader.js +3 -3
  285. package/src/components/icon/QIcon.js +3 -3
  286. package/src/components/icon/QIcon.json +1 -1
  287. package/src/components/img/QImg.js +5 -5
  288. package/src/components/img/QImg.json +1 -1
  289. package/src/components/infinite-scroll/QInfiniteScroll.js +6 -6
  290. package/src/components/infinite-scroll/QInfiniteScroll.json +20 -7
  291. package/src/components/inner-loading/QInnerLoading.js +3 -3
  292. package/src/components/inner-loading/QInnerLoading.json +1 -1
  293. package/src/components/input/QInput.js +9 -9
  294. package/src/components/input/QInput.json +16 -5
  295. package/src/components/input/use-mask.js +1 -1
  296. package/src/components/intersection/QIntersection.js +2 -2
  297. package/src/components/item/QItem.js +6 -6
  298. package/src/components/item/QItem.json +1 -1
  299. package/src/components/item/QItemLabel.js +2 -2
  300. package/src/components/item/QItemSection.js +2 -2
  301. package/src/components/item/QList.js +3 -3
  302. package/src/components/knob/QKnob.js +6 -6
  303. package/src/components/knob/QKnob.json +1 -1
  304. package/src/components/layout/QLayout.js +4 -4
  305. package/src/components/linear-progress/QLinearProgress.js +4 -4
  306. package/src/components/linear-progress/QLinearProgress.json +1 -1
  307. package/src/components/markup-table/QMarkupTable.js +3 -3
  308. package/src/components/menu/QMenu.js +20 -20
  309. package/src/components/menu/QMenu.json +8 -4
  310. package/src/components/no-ssr/QNoSsr.js +3 -3
  311. package/src/components/option-group/QOptionGroup.js +2 -2
  312. package/src/components/option-group/QOptionGroup.json +4 -4
  313. package/src/components/page/QPage.js +3 -3
  314. package/src/components/page/QPageContainer.js +3 -3
  315. package/src/components/page-scroller/QPageScroller.js +2 -2
  316. package/src/components/page-sticky/QPageSticky.js +1 -1
  317. package/src/components/page-sticky/QPageSticky.json +1 -1
  318. package/src/components/page-sticky/use-page-sticky.js +2 -2
  319. package/src/components/pagination/QPagination.js +4 -4
  320. package/src/components/pagination/QPagination.json +5 -3
  321. package/src/components/parallax/QParallax.js +6 -6
  322. package/src/components/popup-edit/QPopupEdit.js +4 -4
  323. package/src/components/popup-edit/QPopupEdit.json +30 -14
  324. package/src/components/popup-proxy/QPopupProxy.js +3 -3
  325. package/src/components/popup-proxy/QPopupProxy.json +9 -5
  326. package/src/components/pull-to-refresh/QPullToRefresh.js +5 -5
  327. package/src/components/pull-to-refresh/QPullToRefresh.json +6 -2
  328. package/src/components/radio/QRadio.js +9 -9
  329. package/src/components/radio/QRadio.json +4 -2
  330. package/src/components/range/QRange.js +3 -3
  331. package/src/components/rating/QRating.js +6 -6
  332. package/src/components/rating/QRating.json +2 -2
  333. package/src/components/resize-observer/QResizeObserver.js +3 -3
  334. package/src/components/resize-observer/QResizeObserver.json +2 -1
  335. package/src/components/responsive/QResponsive.js +3 -3
  336. package/src/components/responsive/QResponsive.json +1 -1
  337. package/src/components/scroll-area/QScrollArea.js +6 -6
  338. package/src/components/scroll-area/QScrollArea.json +8 -2
  339. package/src/components/scroll-observer/QScrollObserver.js +3 -3
  340. package/src/components/scroll-observer/QScrollObserver.json +5 -2
  341. package/src/components/select/QSelect.js +10 -10
  342. package/src/components/select/QSelect.json +38 -17
  343. package/src/components/separator/QSeparator.js +2 -2
  344. package/src/components/skeleton/QSkeleton.js +3 -3
  345. package/src/components/slide-item/QSlideItem.js +4 -4
  346. package/src/components/slide-item/QSlideItem.json +3 -1
  347. package/src/components/slide-transition/QSlideTransition.js +1 -1
  348. package/src/components/slider/QSlider.js +4 -4
  349. package/src/components/slider/use-slider.js +6 -6
  350. package/src/components/slider/use-slider.json +1 -1
  351. package/src/components/space/QSpace.js +1 -1
  352. package/src/components/space/QSpace.test.js +17 -0
  353. package/src/components/spinner/QSpinner.js +1 -1
  354. package/src/components/spinner/QSpinner.json +1 -1
  355. package/src/components/spinner/QSpinnerAudio.js +1 -1
  356. package/src/components/spinner/QSpinnerBall.js +1 -1
  357. package/src/components/spinner/QSpinnerBars.js +1 -1
  358. package/src/components/spinner/QSpinnerBox.js +1 -1
  359. package/src/components/spinner/QSpinnerClock.js +1 -1
  360. package/src/components/spinner/QSpinnerComment.js +1 -1
  361. package/src/components/spinner/QSpinnerCube.js +1 -1
  362. package/src/components/spinner/QSpinnerDots.js +1 -1
  363. package/src/components/spinner/QSpinnerFacebook.js +1 -1
  364. package/src/components/spinner/QSpinnerGears.js +1 -1
  365. package/src/components/spinner/QSpinnerGrid.js +1 -1
  366. package/src/components/spinner/QSpinnerHearts.js +1 -1
  367. package/src/components/spinner/QSpinnerHourglass.js +1 -1
  368. package/src/components/spinner/QSpinnerInfinity.js +1 -1
  369. package/src/components/spinner/QSpinnerIos.js +1 -1
  370. package/src/components/spinner/QSpinnerOrbit.js +1 -1
  371. package/src/components/spinner/QSpinnerOval.js +1 -1
  372. package/src/components/spinner/QSpinnerPie.js +1 -1
  373. package/src/components/spinner/QSpinnerPuff.js +1 -1
  374. package/src/components/spinner/QSpinnerRadio.js +1 -1
  375. package/src/components/spinner/QSpinnerRings.js +1 -1
  376. package/src/components/spinner/QSpinnerTail.js +1 -1
  377. package/src/components/spinner/spinner.json +1 -1
  378. package/src/components/spinner/use-spinner.js +1 -1
  379. package/src/components/splitter/QSplitter.js +3 -3
  380. package/src/components/splitter/QSplitter.json +4 -4
  381. package/src/components/stepper/QStep.js +5 -5
  382. package/src/components/stepper/QStep.json +1 -1
  383. package/src/components/stepper/QStepper.js +5 -5
  384. package/src/components/stepper/QStepper.json +1 -1
  385. package/src/components/stepper/QStepperNavigation.js +2 -2
  386. package/src/components/stepper/StepHeader.js +1 -1
  387. package/src/components/tab-panels/QTabPanel.js +3 -3
  388. package/src/components/tab-panels/QTabPanel.json +1 -7
  389. package/src/components/tab-panels/QTabPanels.js +4 -4
  390. package/src/components/tab-panels/QTabPanels.json +1 -1
  391. package/src/components/table/QTable.js +7 -7
  392. package/src/components/table/QTable.json +41 -22
  393. package/src/components/table/QTd.js +2 -2
  394. package/src/components/table/QTh.js +2 -2
  395. package/src/components/table/QTr.js +2 -2
  396. package/src/components/table/table-column-selection.js +1 -1
  397. package/src/components/table/table-sort.js +2 -2
  398. package/src/components/tabs/QRouteTab.js +2 -2
  399. package/src/components/tabs/QRouteTab.json +1 -1
  400. package/src/components/tabs/QTab.js +1 -1
  401. package/src/components/tabs/QTabs.js +6 -6
  402. package/src/components/tabs/use-tab.js +6 -6
  403. package/src/components/time/QTime.js +8 -8
  404. package/src/components/time/QTime.json +5 -3
  405. package/src/components/timeline/QTimeline.js +4 -4
  406. package/src/components/timeline/QTimelineEntry.js +3 -3
  407. package/src/components/toggle/QToggle.js +1 -1
  408. package/src/components/toolbar/QToolbar.js +2 -2
  409. package/src/components/toolbar/QToolbarTitle.js +2 -2
  410. package/src/components/tooltip/QTooltip.js +15 -15
  411. package/src/components/tooltip/QTooltip.json +6 -5
  412. package/src/components/tree/QTree.js +5 -5
  413. package/src/components/tree/QTree.json +12 -4
  414. package/src/components/uploader/QUploader.js +1 -1
  415. package/src/components/uploader/QUploader.json +25 -10
  416. package/src/components/uploader/QUploaderAddTrigger.js +2 -2
  417. package/src/components/uploader/uploader-core.js +8 -8
  418. package/src/components/uploader/xhr-uploader-plugin.js +3 -1
  419. package/src/components/uploader/xhr-uploader-plugin.json +9 -9
  420. package/src/components/video/QVideo.js +2 -2
  421. package/src/components/video/QVideo.json +1 -1
  422. package/src/components/video/QVideo.test.js +183 -0
  423. package/src/components/virtual-scroll/QVirtualScroll.js +4 -4
  424. package/src/components/virtual-scroll/QVirtualScroll.json +1 -0
  425. package/src/components/virtual-scroll/use-virtual-scroll.js +3 -3
  426. package/src/components/virtual-scroll/use-virtual-scroll.json +7 -3
  427. package/src/composables/private.use-align/use-align.test.js +62 -0
  428. package/src/composables/{private → private.use-anchor}/use-anchor.js +3 -3
  429. package/src/composables/{private → private.use-anchor}/use-anchor.json +0 -1
  430. package/src/composables/private.use-dark/use-dark.test.js +68 -0
  431. package/src/composables/{private → private.use-field}/use-field.js +8 -8
  432. package/src/composables/{private → private.use-field}/use-field.json +7 -10
  433. package/src/composables/{private → private.use-file}/use-file.js +1 -1
  434. package/src/composables/{private → private.use-file}/use-file.json +4 -2
  435. package/src/composables/{private → private.use-fullscreen}/use-fullscreen.js +2 -2
  436. package/src/composables/{private → private.use-fullscreen}/use-fullscreen.json +9 -3
  437. package/src/composables/{private → private.use-history}/use-history.js +1 -1
  438. package/src/composables/private.use-history/use-history.test.js +116 -0
  439. package/src/composables/{private → private.use-model-toggle}/use-model-toggle.js +1 -1
  440. package/src/composables/{private → private.use-panel}/use-panel.js +3 -3
  441. package/src/composables/{private → private.use-panel}/use-panel.json +10 -5
  442. package/src/composables/{private → private.use-portal}/use-portal.js +6 -6
  443. package/src/composables/{private → private.use-prevent-scroll}/use-prevent-scroll.js +1 -1
  444. package/src/composables/private.use-ratio/use-ratio.test.js +40 -0
  445. package/src/composables/{private → private.use-router-link}/use-router-link.js +1 -1
  446. package/src/composables/{private → private.use-scroll-target}/use-scroll-target.js +2 -5
  447. package/src/composables/private.use-size/use-size.test.js +40 -0
  448. package/src/composables/private.use-transition/use-transition.test.js +118 -0
  449. package/src/composables/{private → private.use-validate}/use-validate.js +4 -4
  450. package/src/composables/{private → private.use-validate}/use-validate.json +3 -1
  451. package/src/composables/{use-dialog-plugin-component.js → use-dialog-plugin-component/use-dialog-plugin-component.js} +2 -4
  452. package/src/composables/use-form/private.use-form.test.js +107 -0
  453. package/src/composables/{use-form-child.js → use-form/use-form-child.js} +1 -1
  454. package/src/composables/{use-hydration.js → use-hydration/use-hydration.js} +1 -1
  455. package/src/composables/use-hydration/use-hydration.test.js +27 -0
  456. package/src/composables/{use-id.js → use-id/use-id.js} +2 -2
  457. package/src/composables/use-id/use-id.test.js +72 -0
  458. package/src/composables/{use-interval.js → use-interval/use-interval.js} +1 -1
  459. package/src/composables/{use-meta.js → use-meta/use-meta.js} +1 -1
  460. package/src/composables/{use-quasar.js → use-quasar/use-quasar.js} +2 -1
  461. package/src/composables/use-quasar/use-quasar.test.js +35 -0
  462. package/src/composables/{use-tick.js → use-tick/use-tick.js} +1 -1
  463. package/src/composables/{use-timeout.js → use-timeout/use-timeout.js} +1 -1
  464. package/src/composables.js +11 -11
  465. package/src/css/index.sass +1 -1
  466. package/src/directives/close-popup/ClosePopup.js +4 -4
  467. package/src/directives/intersection/Intersection.js +3 -3
  468. package/src/directives/morph/Morph.js +2 -2
  469. package/src/directives/morph/Morph.json +1 -1
  470. package/src/directives/mutation/Mutation.js +2 -2
  471. package/src/directives/ripple/Ripple.js +6 -6
  472. package/src/directives/ripple/Ripple.json +2 -2
  473. package/src/directives/ripple/Ripple.test.js +340 -0
  474. package/src/directives/scroll/Scroll.js +4 -4
  475. package/src/directives/scroll-fire/ScrollFire.js +6 -6
  476. package/src/directives/scroll-fire/ScrollFire.json +1 -1
  477. package/src/directives/touch-hold/TouchHold.js +4 -4
  478. package/src/directives/touch-pan/TouchPan.js +5 -5
  479. package/src/directives/touch-repeat/TouchRepeat.js +5 -5
  480. package/src/directives/touch-swipe/TouchSwipe.js +5 -5
  481. package/src/index.dev.js +10 -4
  482. package/src/index.prod.js +11 -4
  483. package/src/index.ssr.js +11 -4
  484. package/src/index.umd.js +12 -4
  485. package/src/install-quasar.js +14 -9
  486. package/src/plugins/addressbar/AddressbarColor.js +2 -2
  487. package/src/plugins/addressbar/AddressbarColor.json +2 -1
  488. package/src/plugins/app-fullscreen/AppFullscreen.js +3 -3
  489. package/src/plugins/app-fullscreen/AppFullscreen.json +1 -0
  490. package/src/plugins/app-visibility/AppVisibility.js +3 -3
  491. package/src/plugins/bottom-sheet/BottomSheet.js +2 -5
  492. package/src/plugins/bottom-sheet/BottomSheet.json +1 -1
  493. package/src/plugins/bottom-sheet/component/BottomSheetComponent.js +2 -2
  494. package/src/plugins/cookies/Cookies.json +5 -2
  495. package/src/plugins/dark/Dark.js +2 -2
  496. package/src/plugins/dark/Dark.json +5 -2
  497. package/src/plugins/dialog/Dialog.js +2 -5
  498. package/src/plugins/dialog/Dialog.json +3 -3
  499. package/src/plugins/dialog/component/DialogPluginComponent.js +4 -4
  500. package/src/{icon-set.js → plugins/icon-set/IconSet.js} +29 -10
  501. package/src/plugins/icon-set/IconSet.json +1417 -0
  502. package/src/plugins/icon-set/IconSet.test.js +346 -0
  503. package/src/{lang.js → plugins/lang/Lang.js} +25 -15
  504. package/src/plugins/lang/Lang.json +1100 -0
  505. package/src/plugins/lang/Lang.test.js +267 -0
  506. package/src/plugins/loading/Loading.js +5 -5
  507. package/src/plugins/loading/Loading.json +4 -2
  508. package/src/plugins/loading-bar/LoadingBar.js +5 -5
  509. package/src/plugins/loading-bar/LoadingBar.json +9 -4
  510. package/src/plugins/meta/Meta.js +1 -1
  511. package/src/plugins/notify/Notify.js +4 -4
  512. package/src/plugins/notify/Notify.json +8 -6
  513. package/src/plugins/platform/Platform.js +3 -4
  514. package/src/plugins/platform/Platform.json +6 -0
  515. package/src/plugins/platform/Platform.test.js +104 -0
  516. package/src/{body.js → plugins/private.body/Body.js} +5 -4
  517. package/src/{history.js → plugins/private.history/History.js} +2 -2
  518. package/src/plugins/screen/Screen.js +4 -4
  519. package/src/plugins/screen/Screen.json +4 -2
  520. package/src/plugins/{local-storage → storage}/LocalStorage.js +1 -1
  521. package/src/plugins/storage/LocalStorage.json +5 -0
  522. package/src/plugins/storage/LocalStorage.test.js +323 -0
  523. package/src/plugins/{session-storage → storage}/SessionStorage.js +1 -1
  524. package/src/plugins/storage/SessionStorage.json +5 -0
  525. package/src/plugins/storage/SessionStorage.test.js +323 -0
  526. package/src/{utils/private → plugins/storage/engine}/web-storage.js +21 -10
  527. package/src/{utils/private → plugins/storage/engine}/web-storage.json +22 -11
  528. package/src/plugins/storage/engine/web-storage.test.js +43 -0
  529. package/src/plugins.js +8 -4
  530. package/src/utils/EventBus/EventBus.test.js +108 -0
  531. package/src/utils/clone/clone.test.js +111 -0
  532. package/src/utils/colors/colors.test.js +459 -0
  533. package/src/utils/{copy-to-clipboard.js → copy-to-clipboard/copy-to-clipboard.js} +1 -1
  534. package/src/utils/{create-meta-mixin.js → create-meta-mixin/create-meta-mixin.js} +1 -1
  535. package/src/utils/{create-uploader-component.js → create-uploader-component/create-uploader-component.js} +4 -4
  536. package/src/utils/css-var/get-css-var.test.js +32 -0
  537. package/src/utils/css-var/set-css-var.test.js +36 -0
  538. package/src/utils/{date.js → date/date.js} +6 -6
  539. package/src/utils/debounce/debounce.test.js +188 -0
  540. package/src/utils/extend/extend.test.js +93 -0
  541. package/src/utils/{format.js → format/format.js} +2 -2
  542. package/src/utils/format/format.test.js +107 -0
  543. package/src/utils/{frame-debounce.js → frame-debounce/frame-debounce.js} +1 -1
  544. package/src/utils/frame-debounce/frame-debounce.test.js +127 -0
  545. package/src/utils/is/is.test.js +125 -0
  546. package/src/utils/{morph.js → morph/morph.js} +1 -1
  547. package/src/utils/{open-url.js → open-url/open-url.js} +3 -3
  548. package/src/utils/patterns/patterns.test.js +403 -0
  549. package/src/utils/{private → private.click-outside}/click-outside.js +2 -2
  550. package/src/utils/{private/define-reactive-plugin.js → private.create/create.js} +6 -3
  551. package/src/utils/private.create/create.test.js +58 -0
  552. package/src/utils/private.focus/focus-manager.test.js +190 -0
  553. package/src/utils/private.focus/focusout.test.js +114 -0
  554. package/src/utils/private.get-emits-object/get-emits-object.test.js +29 -0
  555. package/src/utils/private.global/global-config.test.js +54 -0
  556. package/src/utils/{private → private.global}/global-dialog.js +1 -1
  557. package/src/utils/{private → private.global}/global-dialog.json +1 -1
  558. package/src/utils/{private → private.global}/global-nodes.js +1 -1
  559. package/src/utils/private.global/global-nodes.test.js +110 -0
  560. package/src/utils/private.inject-obj-prop/inject-obj-prop.test.js +104 -0
  561. package/src/utils/{private → private.keyboard}/escape-key.js +1 -1
  562. package/src/utils/private.keyboard/escape-key.test.js +117 -0
  563. package/src/utils/private.noop-ssr-directive-transform/noop-ssr-directive-transform.test.js +14 -0
  564. package/src/utils/{private → private.portal}/portal.js +1 -1
  565. package/src/utils/{private → private.position-engine}/position-engine.js +1 -1
  566. package/src/utils/private.rtl/rtl.test.js +13 -0
  567. package/src/utils/private.sort/sort.test.js +25 -0
  568. package/src/utils/{private → private.symbols}/symbols.js +1 -1
  569. package/src/utils/private.touch/touch.test.js +102 -0
  570. package/src/utils/{prevent-scroll.js → scroll/prevent-scroll.js} +3 -3
  571. package/src/utils/{scroll.js → scroll/scroll.js} +1 -1
  572. package/src/utils/throttle/throttle.test.js +146 -0
  573. package/src/utils/uid/uid.test.js +17 -0
  574. package/src/utils.js +24 -24
  575. package/src/vue-plugin.js +12 -4
  576. package/src/Lang.json +0 -19
  577. package/src/api-file-example.json +0 -94
  578. package/src/composables/private/__tests__/use-form.cy.js +0 -11
  579. package/src/composables/private/__tests__/use-size.cy.js +0 -36
  580. package/src/composables/private/__tests__/use-transition.cy.js +0 -111
  581. package/src/composables/private/use-form.test.js +0 -93
  582. package/src/composables/private/use-ratio.test.js +0 -27
  583. package/src/composables/private/use-size.test.js +0 -22
  584. package/src/composables/use-id.test.js +0 -55
  585. package/src/plugins/local-storage/LocalStorage.json +0 -5
  586. package/src/plugins/session-storage/SessionStorage.json +0 -5
  587. package/src/utils/private/create.js +0 -4
  588. /package/src/composables/{private/__tests__ → __tests__}/FieldWrapper.vue +0 -0
  589. /package/src/composables/{private/__tests__ → __tests__}/use-anchor.cy.js +0 -0
  590. /package/src/composables/{private/__tests__ → __tests__}/use-field.cy.js +0 -0
  591. /package/src/composables/{private/__tests__ → __tests__}/use-file.cy.js +0 -0
  592. /package/src/composables/{private/__tests__ → __tests__}/use-fullscreen.cy.js +0 -0
  593. /package/src/composables/{private/__tests__ → __tests__}/use-model-toggle.cy.js +0 -0
  594. /package/src/composables/{private/__tests__ → __tests__}/use-portal.cy.js +0 -0
  595. /package/src/composables/{private/__tests__ → __tests__}/use-router-link.cy.js +0 -0
  596. /package/src/composables/{private/__tests__ → __tests__}/use-validate.cy.js +0 -0
  597. /package/src/composables/{private → private.use-align}/use-align.js +0 -0
  598. /package/src/composables/{private → private.use-dark}/use-dark.js +0 -0
  599. /package/src/composables/{private → private.use-file}/use-file-dom-props.js +0 -0
  600. /package/src/composables/{private → private.use-key-composition}/use-key-composition.js +0 -0
  601. /package/src/composables/{private → private.use-model-toggle}/use-model-toggle.json +0 -0
  602. /package/src/composables/{private → private.use-panel}/use-panel.child.json +0 -0
  603. /package/src/composables/{private → private.use-panel}/use-panel.sass +0 -0
  604. /package/src/composables/{private → private.use-portal}/use-portal.json +0 -0
  605. /package/src/composables/{private → private.use-ratio}/use-ratio.js +0 -0
  606. /package/src/composables/{private → private.use-ratio}/use-ratio.json +0 -0
  607. /package/src/composables/{private → private.use-refocus-target}/use-refocus-target.js +0 -0
  608. /package/src/composables/{private → private.use-router-link}/use-router-link.json +0 -0
  609. /package/src/composables/{private → private.use-size}/use-size.js +0 -0
  610. /package/src/composables/{private → private.use-size}/use-size.json +0 -0
  611. /package/src/composables/{private → private.use-transition}/use-transition.js +0 -0
  612. /package/src/composables/{private → private.use-transition}/use-transition.json +0 -0
  613. /package/src/composables/{private/use-form.js → use-form/private.use-form.js} +0 -0
  614. /package/src/composables/{private/use-form.json → use-form/private.use-form.json} +0 -0
  615. /package/src/composables/{use-render-cache.js → use-render-cache/use-render-cache.js} +0 -0
  616. /package/src/composables/{use-split-attrs.js → use-split-attrs/use-split-attrs.js} +0 -0
  617. /package/src/utils/{EventBus.js → EventBus/EventBus.js} +0 -0
  618. /package/src/utils/{clone.js → clone/clone.js} +0 -0
  619. /package/src/utils/{colors.js → colors/colors.js} +0 -0
  620. /package/src/utils/{get-css-var.js → css-var/get-css-var.js} +0 -0
  621. /package/src/utils/{set-css-var.js → css-var/set-css-var.js} +0 -0
  622. /package/src/utils/{private/date-persian.js → date/private.persian.js} +0 -0
  623. /package/src/utils/{debounce.js → debounce/debounce.js} +0 -0
  624. /package/src/utils/{dom.js → dom/dom.js} +0 -0
  625. /package/src/utils/{event.js → event/event.js} +0 -0
  626. /package/src/utils/{export-file.js → export-file/export-file.js} +0 -0
  627. /package/src/utils/{extend.js → extend/extend.js} +0 -0
  628. /package/src/utils/{is.js → is/is.js} +0 -0
  629. /package/src/utils/{patterns.js → patterns/patterns.js} +0 -0
  630. /package/src/utils/{private → private.focus}/focus-manager.js +0 -0
  631. /package/src/utils/{private → private.focus}/focusout.js +0 -0
  632. /package/src/utils/{private → private.get-emits-object}/get-emits-object.js +0 -0
  633. /package/src/utils/{private → private.global}/global-config.js +0 -0
  634. /package/src/utils/{private → private.inject-obj-prop}/inject-obj-prop.js +0 -0
  635. /package/src/utils/{private → private.keyboard}/key-composition.js +0 -0
  636. /package/src/utils/{private → private.noop-ssr-directive-transform}/noop-ssr-directive-transform.js +0 -0
  637. /package/src/utils/{private → private.option-sizes}/option-sizes.js +0 -0
  638. /package/src/utils/{private → private.render}/render.js +0 -0
  639. /package/src/utils/{private → private.rtl}/rtl.js +0 -0
  640. /package/src/utils/{private → private.selection}/selection.js +0 -0
  641. /package/src/utils/{private → private.sort}/sort.js +0 -0
  642. /package/src/utils/{private → private.touch}/touch.js +0 -0
  643. /package/src/utils/{private → private.vm}/vm.js +0 -0
  644. /package/src/utils/{run-sequential-promises.js → run-sequential-promises/run-sequential-promises.js} +0 -0
  645. /package/src/utils/{throttle.js → throttle/throttle.js} +0 -0
  646. /package/src/utils/{uid.js → uid/uid.js} +0 -0
@@ -1,149 +1,390 @@
1
- import { mount } from '@vue/test-utils'
2
- import { describe, test, expect, vi } from 'vitest'
1
+ import { mount, flushPromises } from '@vue/test-utils'
2
+ import { describe, test, expect } from 'vitest'
3
3
 
4
4
  import QChip, { defaultSizes } from './QChip.js'
5
5
 
6
- const defaultOptions = {
7
- label: 'simple chip'
8
- }
6
+ describe('[QChip API]', () => {
7
+ describe('[Props]', () => {
8
+ describe('[(prop)dense]', () => {
9
+ test('is defined correctly', () => {
10
+ expect(QChip.props.dense).toBeDefined()
11
+ })
9
12
 
10
- const chipSizeValues = Object.keys(defaultSizes)
13
+ test('type Boolean has effect', async () => {
14
+ const wrapper = mount(QChip)
15
+ const target = wrapper.get('.q-chip')
11
16
 
12
- function mountQChip (options = {}) {
13
- options.props = {
14
- ...defaultOptions,
15
- ...options.props
16
- }
17
+ expect(
18
+ target.classes()
19
+ ).not.toContain('q-chip--dense')
17
20
 
18
- return mount(QChip, options)
19
- }
21
+ await wrapper.setProps({ dense: true })
22
+ await flushPromises()
23
+
24
+ expect(
25
+ target.classes()
26
+ ).toContain('q-chip--dense')
27
+ })
28
+ })
29
+
30
+ describe('[(prop)size]', () => {
31
+ test('is defined correctly', () => {
32
+ expect(QChip.props.size).toBeDefined()
33
+ })
34
+
35
+ test('type String has effect', async () => {
36
+ const wrapper = mount(QChip)
37
+ const target = wrapper.get('.q-chip')
38
+
39
+ expect(
40
+ target.$style('font-size')
41
+ ).not.toBe('100px')
42
+
43
+ await wrapper.setProps({ size: '100px' })
44
+ await flushPromises()
45
+
46
+ expect(
47
+ target.$style('font-size')
48
+ ).toBe('100px')
49
+
50
+ await wrapper.setProps({ size: 'sm' })
51
+
52
+ expect(
53
+ target.$style('font-size')
54
+ ).toBe(`${ defaultSizes.sm }px`)
55
+ })
56
+ })
57
+
58
+ describe('[(prop)dark]', () => {
59
+ test('is defined correctly', () => {
60
+ expect(QChip.props.dark).toBeDefined()
61
+ })
62
+
63
+ test('type Boolean has effect', async () => {
64
+ const wrapper = mount(QChip)
65
+ const target = wrapper.get('.q-chip')
66
+
67
+ expect(
68
+ target.classes()
69
+ ).not.toContain('q-chip--dark')
70
+
71
+ await wrapper.setProps({ dark: true })
72
+ await flushPromises()
73
+
74
+ expect(
75
+ target.classes()
76
+ ).toContain('q-chip--dark')
77
+ })
78
+
79
+ test('type null has effect', async () => {
80
+ const wrapper = mount(QChip)
81
+ const target = wrapper.get('.q-chip')
82
+
83
+ expect(
84
+ target.classes()
85
+ ).not.toContain('q-chip--dense')
86
+
87
+ await wrapper.setProps({ dark: null })
88
+ await flushPromises()
89
+
90
+ expect(
91
+ target.classes()
92
+ ).not.toContain('q-chip--dense')
93
+ })
94
+ })
20
95
 
21
- describe('[QChip API]', () => {
22
- describe('[Props]', () => {
23
96
  describe('[(prop)icon]', () => {
24
- test('should render an icon on the left', () => {
25
- const icon = 'add'
26
- const wrapper = mountQChip({
27
- props: {
28
- icon
29
- }
30
- })
97
+ test('is defined correctly', () => {
98
+ expect(QChip.props.icon).toBeDefined()
99
+ })
100
+
101
+ test('type String has effect', async () => {
102
+ const propVal = 'map'
103
+ const wrapper = mount(QChip)
31
104
 
32
105
  expect(
33
- wrapper.get('.q-chip')
34
- .get('.q-icon.q-chip__icon--left')
35
- .text()
36
- ).toBe(icon)
106
+ wrapper.find('.q-icon').exists()
107
+ ).toBe(false)
108
+
109
+ await wrapper.setProps({ icon: propVal })
110
+ await flushPromises()
111
+
112
+ expect(
113
+ wrapper.get('.q-icon').text()
114
+ ).toContain(propVal)
37
115
  })
38
116
  })
39
117
 
40
118
  describe('[(prop)icon-right]', () => {
41
- test('should render an icon on the right', () => {
42
- const icon = 'add'
43
- const wrapper = mountQChip({
44
- props: {
45
- iconRight: icon
46
- }
47
- })
119
+ test('is defined correctly', () => {
120
+ expect(QChip.props.iconRight).toBeDefined()
121
+ })
122
+
123
+ test('type String has effect', async () => {
124
+ const propVal = 'map'
125
+ const wrapper = mount(QChip)
48
126
 
49
127
  expect(
50
- wrapper.get('.q-chip')
51
- .get('.q-icon.q-chip__icon--right')
52
- .text()
53
- ).toBe(icon)
128
+ wrapper.find('.q-icon').exists()
129
+ ).toBe(false)
130
+
131
+ await wrapper.setProps({ iconRight: propVal })
132
+ await flushPromises()
133
+
134
+ expect(
135
+ wrapper.get('.q-icon').text()
136
+ ).toContain(propVal)
54
137
  })
55
138
  })
56
139
 
57
140
  describe('[(prop)icon-remove]', () => {
58
- test('should render a custom remove icon', () => {
59
- const icon = 'delete'
60
- const wrapper = mountQChip({
61
- props: {
62
- removable: true,
63
- iconRemove: icon
64
- }
141
+ test('is defined correctly', () => {
142
+ expect(QChip.props.iconRemove).toBeDefined()
143
+ })
144
+
145
+ test('type String has effect', async () => {
146
+ const propVal = 'map'
147
+ const wrapper = mount(QChip)
148
+
149
+ expect(
150
+ wrapper.find('.q-icon').exists()
151
+ ).toBe(false)
152
+
153
+ await wrapper.setProps({
154
+ removable: true,
155
+ iconRemove: propVal
65
156
  })
157
+ await flushPromises()
66
158
 
67
159
  expect(
68
- wrapper.get('.q-chip')
69
- .get('.q-icon.q-chip__icon--remove')
160
+ wrapper.get('.q-icon.q-chip__icon--remove')
70
161
  .text()
71
- ).toBe(icon)
162
+ ).toBe(propVal)
72
163
  })
73
164
  })
74
165
 
75
166
  describe('[(prop)icon-selected]', () => {
76
- test('should render a custom selected icon when one provided', () => {
77
- const icon = 'done'
78
- const wrapper = mountQChip({
79
- props: {
80
- selected: true,
81
- iconSelected: icon
82
- }
167
+ test('is defined correctly', () => {
168
+ expect(QChip.props.iconSelected).toBeDefined()
169
+ })
170
+
171
+ test('type String has effect', async () => {
172
+ const propVal = 'map'
173
+ const wrapper = mount(QChip)
174
+
175
+ expect(
176
+ wrapper.find('.q-icon').exists()
177
+ ).toBe(false)
178
+
179
+ await wrapper.setProps({
180
+ selected: true,
181
+ iconSelected: propVal
83
182
  })
183
+ await flushPromises()
84
184
 
85
185
  expect(
86
186
  wrapper.get('.q-chip.q-chip--selected')
87
187
  .get('.q-icon')
88
188
  .text()
89
- ).toBe(icon)
189
+ ).toBe(propVal)
90
190
  })
91
191
  })
92
192
 
93
193
  describe('[(prop)label]', () => {
94
- test('should render a label inside the chip', () => {
95
- const label = 'Chip label'
96
- const wrapper = mountQChip({
194
+ test('is defined correctly', () => {
195
+ expect(QChip.props.label).toBeDefined()
196
+ })
197
+
198
+ test.each([
199
+ [ 'String', 'John Doe' ],
200
+ [ 'Number', 22 ]
201
+ ])('type %s has effect', async (_, propVal) => {
202
+ const wrapper = mount(QChip)
203
+
204
+ expect(
205
+ wrapper.get('.q-chip__content')
206
+ .text()
207
+ ).not.toBe('' + propVal)
208
+
209
+ await wrapper.setProps({ label: propVal })
210
+ await flushPromises()
211
+
212
+ expect(
213
+ wrapper.get('.q-chip__content')
214
+ .text()
215
+ ).toBe('' + propVal)
216
+ })
217
+ })
218
+
219
+ describe('[(prop)color]', () => {
220
+ test('is defined correctly', () => {
221
+ expect(QChip.props.color).toBeDefined()
222
+ })
223
+
224
+ test('with default design', async () => {
225
+ const propVal = 'red'
226
+ const wrapper = mount(QChip)
227
+ const target = wrapper.get('.q-chip')
228
+
229
+ let cls = target.classes()
230
+ expect(cls).not.toContain('text-red')
231
+ expect(cls).not.toContain('bg-red')
232
+
233
+ await wrapper.setProps({ color: propVal })
234
+ await flushPromises()
235
+
236
+ cls = target.classes()
237
+ expect(cls).not.toContain('text-red')
238
+ expect(cls).toContain('bg-red')
239
+ })
240
+
241
+ test('with outline design', async () => {
242
+ const propVal = 'red'
243
+ const wrapper = mount(QChip, {
97
244
  props: {
98
- label
245
+ outline: true
99
246
  }
100
247
  })
101
248
 
102
- expect(
103
- wrapper.get('.q-chip')
104
- .get('.q-chip__content')
105
- .text()
106
- ).toBe(label)
249
+ const target = wrapper.get('.q-chip')
250
+
251
+ let cls = target.classes()
252
+ expect(cls).not.toContain('text-red')
253
+ expect(cls).not.toContain('bg-red')
254
+
255
+ await wrapper.setProps({ color: propVal })
256
+ await flushPromises()
257
+
258
+ cls = target.classes()
259
+ expect(cls).toContain('text-red')
260
+ expect(cls).not.toContain('bg-red')
107
261
  })
108
262
  })
109
263
 
110
- describe('[(prop)tabindex]', () => {
111
- test('should set the tabindex', () => {
112
- const tabindex = 1
113
- const wrapper = mountQChip({
264
+ describe('[(prop)text-color]', () => {
265
+ test('is defined correctly', () => {
266
+ expect(QChip.props.textColor).toBeDefined()
267
+ })
268
+
269
+ test('with default design', async () => {
270
+ const propVal = 'red'
271
+ const wrapper = mount(QChip)
272
+ const target = wrapper.get('.q-chip')
273
+
274
+ let cls = target.classes()
275
+ expect(cls).not.toContain('text-red')
276
+ expect(cls).not.toContain('bg-red')
277
+ expect(cls).not.toContain('q-chip--colored')
278
+
279
+ await wrapper.setProps({ textColor: propVal })
280
+ await flushPromises()
281
+
282
+ cls = target.classes()
283
+ expect(cls).toContain('text-red')
284
+ expect(cls).not.toContain('bg-red')
285
+ expect(cls).toContain('q-chip--colored')
286
+ })
287
+
288
+ test('with default design + color', async () => {
289
+ const propVal = 'red'
290
+ const wrapper = mount(QChip, {
114
291
  props: {
115
- clickable: true,
116
- tabindex
292
+ color: 'blue'
117
293
  }
118
294
  })
119
295
 
120
- expect(
121
- wrapper.get('.q-chip')
122
- .attributes('tabindex')
123
- ).toBe(`${ tabindex }`)
296
+ const target = wrapper.get('.q-chip')
297
+
298
+ let cls = target.classes()
299
+ expect(cls).not.toContain('text-blue')
300
+ expect(cls).toContain('bg-blue')
301
+ expect(cls).not.toContain('text-red')
302
+ expect(cls).not.toContain('bg-red')
303
+ expect(cls).not.toContain('q-chip--colored')
304
+
305
+ await wrapper.setProps({ textColor: propVal })
306
+ await flushPromises()
307
+
308
+ cls = target.classes()
309
+ expect(cls).not.toContain('text-blue')
310
+ expect(cls).toContain('bg-blue')
311
+ expect(cls).toContain('text-red')
312
+ expect(cls).not.toContain('bg-red')
313
+ expect(cls).toContain('q-chip--colored')
314
+ })
315
+
316
+ test('with outline design', async () => {
317
+ const propVal = 'red'
318
+ const wrapper = mount(QChip, {
319
+ props: {
320
+ outline: true
321
+ }
322
+ })
323
+
324
+ const target = wrapper.get('.q-chip')
325
+
326
+ let cls = target.classes()
327
+ expect(cls).not.toContain('text-red')
328
+ expect(cls).not.toContain('bg-red')
329
+ expect(cls).not.toContain('q-chip--colored')
330
+
331
+ await wrapper.setProps({ textColor: propVal })
332
+ await flushPromises()
333
+
334
+ cls = target.classes()
335
+ expect(cls).toContain('text-red')
336
+ expect(cls).not.toContain('bg-red')
337
+ expect(cls).toContain('q-chip--colored')
338
+ })
339
+
340
+ test('with outline design + color', async () => {
341
+ const propVal = 'red'
342
+ const wrapper = mount(QChip, {
343
+ props: {
344
+ color: 'blue',
345
+ outline: true
346
+ }
347
+ })
348
+
349
+ const target = wrapper.get('.q-chip')
350
+
351
+ let cls = target.classes()
352
+ expect(cls).not.toContain('text-red')
353
+ expect(cls).not.toContain('bg-red')
354
+ expect(cls).toContain('text-blue')
355
+ expect(cls).not.toContain('bg-blue')
356
+ expect(cls).toContain('q-chip--colored')
357
+
358
+ await wrapper.setProps({ textColor: propVal })
359
+ await flushPromises()
360
+
361
+ cls = target.classes()
362
+ expect(cls).toContain('text-blue')
363
+ expect(cls).not.toContain('bg-blue')
364
+ expect(cls).not.toContain('text-red')
365
+ expect(cls).not.toContain('bg-red')
366
+ expect(cls).toContain('q-chip--colored')
124
367
  })
125
368
  })
126
369
 
127
370
  describe('[(prop)model-value]', () => {
128
- test('should render when "modelValue" prop is true', () => {
129
- const wrapper = mountQChip({
371
+ test('is defined correctly', () => {
372
+ expect(QChip.props.modelValue).toBeDefined()
373
+ })
374
+
375
+ test('type Boolean has effect', async () => {
376
+ const wrapper = mount(QChip, {
130
377
  props: {
131
378
  modelValue: true
132
379
  }
133
380
  })
134
381
 
135
382
  expect(
136
- wrapper.find('.q-chip')
137
- .exists()
383
+ wrapper.find('.q-chip').exists()
138
384
  ).toBe(true)
139
- })
140
385
 
141
- test('should not render when "modelValue" prop is false', async () => {
142
- const wrapper = mountQChip({
143
- props: {
144
- modelValue: false
145
- }
146
- })
386
+ await wrapper.setProps({ modelValue: false })
387
+ await flushPromises()
147
388
 
148
389
  expect(
149
390
  wrapper.find('.q-chip')
@@ -153,381 +394,508 @@ describe('[QChip API]', () => {
153
394
  })
154
395
 
155
396
  describe('[(prop)selected]', () => {
156
- test('should be selected when "selected" prop is true', () => {
157
- const wrapper = mountQChip({
158
- props: {
159
- selected: true
160
- }
397
+ test('is defined correctly', () => {
398
+ expect(QChip.props.selected).toBeDefined()
399
+ })
400
+
401
+ test('type Boolean has effect', async () => {
402
+ const wrapper = mount(QChip)
403
+ const target = wrapper.get('.q-chip')
404
+
405
+ expect(
406
+ target.classes()
407
+ ).not.toContain('q-chip--selected')
408
+
409
+ await wrapper.setProps({
410
+ selected: true,
411
+ 'onUpdate:selected': val => { wrapper.setProps({ selected: val }) }
161
412
  })
413
+ await flushPromises()
162
414
 
163
415
  expect(
164
- wrapper.find('.q-chip.q-chip--selected')
165
- .exists()
166
- ).toBe(true)
416
+ target.classes()
417
+ ).toContain('q-chip--selected')
167
418
  })
168
419
 
169
- test('should not be selected when "selected" prop is false', () => {
170
- const wrapper = mountQChip({
171
- props: {
172
- selected: false
173
- }
420
+ test('type null has effect', async () => {
421
+ const wrapper = mount(QChip)
422
+ const target = wrapper.get('.q-chip')
423
+
424
+ expect(
425
+ target.classes()
426
+ ).not.toContain('q-chip--selected')
427
+
428
+ await wrapper.setProps({
429
+ selected: null,
430
+ 'onUpdate:selected': val => { wrapper.setProps({ selected: val }) }
174
431
  })
432
+ await flushPromises()
175
433
 
176
434
  expect(
177
- wrapper.get('.q-chip')
178
- .classes()
435
+ target.classes()
179
436
  ).not.toContain('q-chip--selected')
180
437
  })
181
438
  })
182
439
 
183
- describe('[(prop)clickable]', () => {
184
- test('should have hover effects and emit "click" event when "clickable" prop is true', () => {
185
- const fn = vi.fn()
186
- const wrapper = mountQChip({
187
- props: {
188
- clickable: true,
189
- onClick: fn
190
- }
191
- })
440
+ describe('[(prop)square]', () => {
441
+ test('is defined correctly', () => {
442
+ expect(QChip.props.square).toBeDefined()
443
+ })
444
+
445
+ test('type Boolean has effect', async () => {
446
+ const wrapper = mount(QChip)
447
+ const target = wrapper.get('.q-chip')
192
448
 
193
449
  expect(
194
- wrapper.get('.q-chip')
195
- .$computedStyle('cursor')
196
- ).toBe('pointer')
450
+ target.classes()
451
+ ).not.toContain('q-chip--square')
197
452
 
198
- wrapper.get('.q-chip')
199
- .trigger('click')
453
+ await wrapper.setProps({ square: true })
454
+ await flushPromises()
455
+
456
+ expect(
457
+ target.classes()
458
+ ).toContain('q-chip--square')
200
459
 
201
- expect(fn).toHaveBeenCalledTimes(1)
460
+ expect(
461
+ target.$computedStyle('border-radius')
462
+ ).toBe('4px')
202
463
  })
203
464
  })
204
465
 
205
- describe('[(prop)removable]', () => {
206
- test('should display a remove icon emitting a "remove" event when clicked', () => {
207
- const fn = vi.fn()
208
- const wrapper = mountQChip({
209
- props: {
210
- removable: true,
211
- onRemove: fn
212
- }
213
- })
466
+ describe('[(prop)outline]', () => {
467
+ test('is defined correctly', () => {
468
+ expect(QChip.props.outline).toBeDefined()
469
+ })
214
470
 
215
- wrapper.get('.q-chip')
216
- .get('.q-icon.q-chip__icon--remove')
217
- .trigger('click')
471
+ test('type Boolean has effect', async () => {
472
+ const wrapper = mount(QChip)
473
+ const target = wrapper.get('.q-chip')
474
+
475
+ expect(
476
+ target.classes()
477
+ ).not.toContain('q-chip--outline')
218
478
 
219
- expect(fn).toHaveBeenCalledTimes(1)
479
+ await wrapper.setProps({ outline: true })
480
+ await flushPromises()
481
+
482
+ expect(
483
+ target.classes()
484
+ ).toContain('q-chip--outline')
220
485
  })
221
486
  })
222
487
 
223
- describe('[(prop)disable]', () => {
224
- test('should not have hover effect and not emit "click" event when "disable" prop is true', () => {
225
- const fn = vi.fn()
226
- const wrapper = mountQChip({
227
- props: {
228
- disable: true,
229
- onClick: fn
230
- }
231
- })
488
+ describe('[(prop)clickable]', () => {
489
+ test('is defined correctly', () => {
490
+ expect(QChip.props.clickable).toBeDefined()
491
+ })
492
+
493
+ test('type Boolean has effect', async () => {
494
+ const wrapper = mount(QChip)
495
+ const target = wrapper.get('.q-chip')
232
496
 
233
497
  expect(
234
- wrapper.get('.q-chip')
235
- .$computedStyle('cursor')
236
- ).not.toBe('pointer')
498
+ target.attributes('tabindex')
499
+ ).toBeUndefined()
237
500
 
238
- wrapper.get('.q-chip')
239
- .trigger('click')
501
+ await wrapper.setProps({ clickable: true })
502
+ await flushPromises()
503
+
504
+ expect(
505
+ target.attributes('tabindex')
506
+ ).toBe('0')
240
507
 
241
- expect(fn).not.toHaveBeenCalled()
508
+ expect(
509
+ target.$computedStyle('cursor')
510
+ ).toBe('pointer')
242
511
  })
243
512
  })
244
513
 
245
- describe('[(prop)dense]', () => {
246
- test('should have a dense style when "dense" prop is true', () => {
247
- const wrapper = mountQChip({
248
- props: { dense: true }
249
- })
514
+ describe('[(prop)removable]', () => {
515
+ test('is defined correctly', () => {
516
+ expect(QChip.props.removable).toBeDefined()
517
+ })
518
+
519
+ test('type Boolean has effect', async () => {
520
+ const wrapper = mount(QChip)
521
+
522
+ expect(
523
+ wrapper.find('.q-icon.q-chip__icon--remove')
524
+ .exists()
525
+ ).not.toBe(true)
526
+
527
+ await wrapper.setProps({ removable: true })
528
+ await flushPromises()
250
529
 
251
530
  expect(
252
- wrapper.find('.q-chip.q-chip--dense')
531
+ wrapper.find('.q-icon.q-chip__icon--remove')
253
532
  .exists()
254
533
  ).toBe(true)
255
534
  })
256
535
  })
257
536
 
258
- describe('[(prop)size]', () => {
259
- test('should change QChip size based on a CSS unit value', () => {
260
- const size = '50px'
261
- const wrapper = mountQChip({
262
- props: { size }
263
- })
537
+ describe('[(prop)ripple]', () => {
538
+ test('is defined correctly', () => {
539
+ expect(QChip.props.ripple).toBeDefined()
540
+ })
541
+
542
+ test('type Boolean has effect', async () => {
543
+ const wrapper = mount(QChip)
264
544
 
265
545
  expect(
266
- wrapper.get('.q-chip')
267
- .$style()
268
- ).toContain(`font-size: ${ size };`)
269
- })
546
+ wrapper.find('.q-ripple')
547
+ .exists()
548
+ ).toBe(false)
549
+
550
+ await wrapper.setProps({ ripple: true })
551
+ await flushPromises()
270
552
 
271
- test(`should change QChip size based defined values: ${ chipSizeValues.join(', ') }`, () => {
272
- // loop over chipSizeValues
273
- for (const key of chipSizeValues) {
274
- const wrapper = mountQChip({
275
- props: { size: key }
276
- })
553
+ await wrapper.trigger('click')
277
554
 
278
- expect(
279
- wrapper.get('.q-chip')
280
- .$style()
281
- ).toContain(`font-size: ${ defaultSizes[ key ] }px;`)
282
- }
555
+ expect(
556
+ wrapper.find('.q-ripple')
557
+ .exists()
558
+ ).toBe(true)
283
559
  })
284
- })
285
560
 
286
- describe('[(prop)dark]', () => {
287
- test('should have a dark style when "dark" prop is true', () => {
288
- const wrapper = mountQChip({
289
- props: {
290
- dark: true
291
- }
292
- })
561
+ test('type Object has effect', async () => {
562
+ const propVal = { center: true, color: 'teal', keyCodes: [] }
563
+ const wrapper = mount(QChip)
293
564
 
294
- const cls = wrapper.get('.q-chip').classes()
295
- expect(cls).toContain('q-dark')
296
- expect(cls).toContain('q-chip--dark')
297
- })
298
- })
565
+ expect(
566
+ wrapper.find('.q-ripple')
567
+ .exists()
568
+ ).toBe(false)
299
569
 
300
- describe('[(prop)color]', () => {
301
- test('should change color based on Quasar Color Palette', () => {
302
- const color = 'red'
303
- const wrapper = mountQChip({
304
- props: { color }
305
- })
570
+ await wrapper.setProps({ ripple: propVal })
571
+ await flushPromises()
572
+
573
+ await wrapper.trigger('click')
306
574
 
307
575
  expect(
308
- wrapper.get('.q-chip')
309
- .classes()
310
- ).toContain(`bg-${ color }`)
576
+ wrapper.find('.q-ripple')
577
+ .exists()
578
+ ).toBe(true)
311
579
  })
312
580
  })
313
581
 
314
- describe('[(prop)text-color]', () => {
315
- test('should change text color based on Quasar Color Palette', () => {
316
- const textColor = 'red'
317
- const wrapper = mountQChip({
318
- props: { textColor }
319
- })
320
-
321
- const cls = wrapper.get('.q-chip').classes()
322
- expect(cls).toContain(`text-${ textColor }`)
323
- expect(cls).toContain('q-chip--colored')
582
+ describe('[(prop)remove-aria-label]', () => {
583
+ test('is defined correctly', () => {
584
+ expect(QChip.props.removeAriaLabel).toBeDefined()
324
585
  })
325
- })
326
586
 
327
- describe('[(prop)square]', () => {
328
- test('should have a square style when "square" prop is true', () => {
329
- const wrapper = mountQChip({
587
+ test('type String has effect', async () => {
588
+ const propVal = 'Remove item'
589
+ const wrapper = mount(QChip, {
330
590
  props: {
331
- square: true
591
+ removable: true
332
592
  }
333
593
  })
334
594
 
595
+ const removeIcon = wrapper.get('.q-chip__icon--remove')
596
+
335
597
  expect(
336
- wrapper.get('.q-chip')
337
- .classes()
338
- ).toContain('q-chip--square')
339
- })
340
- })
598
+ removeIcon.attributes('aria-label')
599
+ ).not.toBe(propVal)
341
600
 
342
- describe('[(prop)outline]', () => {
343
- test('should have a outline style when "outline" prop is true', () => {
344
- const wrapper = mountQChip({
345
- props: {
346
- outline: true
347
- }
348
- })
601
+ await wrapper.setProps({ removeAriaLabel: propVal })
602
+ await flushPromises()
349
603
 
350
604
  expect(
351
- wrapper.get('.q-chip')
352
- .classes()
353
- ).toContain('q-chip--outline')
605
+ removeIcon.attributes('aria-label')
606
+ ).toBe(propVal)
607
+
608
+ expect(
609
+ removeIcon.attributes('tabindex')
610
+ ).toBe('0')
354
611
  })
355
612
  })
356
613
 
357
- describe('[(prop)ripple]', () => {
358
- test('should have a ripple effect when "ripple" prop is true', () => {
359
- const wrapper = mountQChip({
614
+ describe('[(prop)tabindex]', () => {
615
+ test('is defined correctly', () => {
616
+ expect(QChip.props.tabindex).toBeDefined()
617
+ })
618
+
619
+ test.each([
620
+ [ 'Number', 100 ],
621
+ [ 'String', '100' ]
622
+ ])('type %s has effect', async (_, propVal) => {
623
+ const wrapper = mount(QChip, {
360
624
  props: {
361
- ripple: true
625
+ clickable: true,
626
+ tabindex: propVal
362
627
  }
363
628
  })
364
629
 
365
- wrapper.get('.q-chip')
366
- .trigger('click')
630
+ expect(
631
+ wrapper.attributes('tabindex')
632
+ ).toBe('' + propVal)
633
+
634
+ // we'll test clickable + disable
635
+ await wrapper.setProps({ disable: true })
636
+ await flushPromises()
367
637
 
368
638
  expect(
369
- wrapper.get('.q-chip')
370
- .find('.q-ripple')
371
- .exists()
372
- ).toBe(true)
373
- })
639
+ wrapper.attributes('tabindex')
640
+ ).toBeUndefined()
374
641
 
375
- test('should not have a ripple effect when "ripple" prop is false', () => {
376
- const wrapper = mountQChip({
377
- props: {
378
- ripple: false
379
- }
642
+ expect(
643
+ wrapper.attributes('aria-disabled')
644
+ ).toBeUndefined()
645
+
646
+ // we'll now test removable + disable
647
+ await wrapper.setProps({
648
+ clickable: false,
649
+ removable: true
380
650
  })
651
+ await flushPromises()
381
652
 
382
- wrapper.get('.q-chip')
383
- .trigger('click')
653
+ let removeIcon = wrapper.get('.q-chip__icon--remove')
384
654
 
385
655
  expect(
386
- wrapper.get('.q-chip')
387
- .find('.q-ripple')
388
- .exists()
389
- ).toBe(false)
656
+ removeIcon.attributes('tabindex')
657
+ ).toBe('-1')
658
+
659
+ expect(
660
+ removeIcon.attributes('aria-disabled')
661
+ ).toBe('true')
662
+
663
+ // we'll now test removable
664
+ await wrapper.setProps({ disable: false })
665
+ await flushPromises()
666
+
667
+ removeIcon = wrapper.get('.q-chip__icon--remove')
668
+
669
+ expect(
670
+ removeIcon.attributes('tabindex')
671
+ ).toBe('' + propVal)
672
+
673
+ expect(
674
+ removeIcon.attributes('aria-disabled')
675
+ ).toBeUndefined()
390
676
  })
391
677
  })
392
678
 
393
- describe.todo('(prop): remove-aria-label', () => {
394
- test(' ', () => {
395
- //
679
+ describe('[(prop)disable]', () => {
680
+ test('is defined correctly', () => {
681
+ expect(QChip.props.disable).toBeDefined()
682
+ })
683
+
684
+ test('type Boolean has effect', async () => {
685
+ const wrapper = mount(QChip)
686
+
687
+ expect(
688
+ wrapper.get('.q-chip').classes()
689
+ ).not.toContain('disabled')
690
+
691
+ await wrapper.setProps({ disable: true })
692
+ await flushPromises()
693
+
694
+ expect(
695
+ wrapper.get('.q-chip').classes()
696
+ ).toContain('disabled')
396
697
  })
397
698
  })
398
699
  })
399
700
 
400
701
  describe('[Slots]', () => {
401
702
  describe('[(slot)default]', () => {
402
- test('should display the default slot content', () => {
403
- const wrapper = mountQChip({
404
- props: {
405
- label: undefined
406
- },
407
-
703
+ test('renders the content', () => {
704
+ const slotContent = 'some-slot-content'
705
+ const wrapper = mount(QChip, {
408
706
  slots: {
409
- default: 'Default Slot Content'
707
+ default: () => slotContent
410
708
  }
411
709
  })
412
710
 
413
- expect(
414
- wrapper.get('.q-chip__content')
415
- .text()
416
- ).toBe('Default Slot Content')
711
+ expect(wrapper.text()).toContain(slotContent)
417
712
  })
418
713
  })
419
714
  })
420
715
 
421
716
  describe('[Events]', () => {
422
717
  describe('[(event)click]', () => {
423
- test('should emit "click" event when clicked and "clickable" prop is true', () => {
424
- const fn = vi.fn()
425
- const wrapper = mountQChip({
718
+ test('is defined correctly', () => {
719
+ expect(
720
+ QChip.emits?.includes('click')
721
+ ^ (QChip.props?.onClick !== void 0)
722
+ ).toBe(1)
723
+ })
724
+
725
+ test('is emitting when clickable', async () => {
726
+ const wrapper = mount(QChip, {
727
+ props: {
728
+ clickable: true
729
+ }
730
+ })
731
+
732
+ await wrapper.trigger('click')
733
+
734
+ const eventList = wrapper.emitted()
735
+ expect(eventList).toHaveProperty('click')
736
+ expect(eventList.click).toHaveLength(1)
737
+
738
+ const [ evt ] = eventList.click[ 0 ]
739
+ expect(evt).toBeInstanceOf(Event)
740
+ })
741
+
742
+ test('is emitting when selected', async () => {
743
+ const wrapper = mount(QChip, {
744
+ props: {
745
+ selected: true
746
+ }
747
+ })
748
+
749
+ await wrapper.trigger('click')
750
+
751
+ const eventList = wrapper.emitted()
752
+ expect(eventList).toHaveProperty('click')
753
+ expect(eventList.click).toHaveLength(1)
754
+
755
+ const [ evt ] = eventList.click[ 0 ]
756
+ expect(evt).toBeInstanceOf(Event)
757
+ })
758
+
759
+ test('is NOT emitting when not clickable or removable', async () => {
760
+ const wrapper = mount(QChip)
761
+
762
+ await wrapper.trigger('click')
763
+
764
+ const eventList = wrapper.emitted()
765
+ expect(eventList).not.toHaveProperty('click')
766
+ })
767
+
768
+ test('is NOT emitting when disable + clickable', async () => {
769
+ const wrapper = mount(QChip, {
426
770
  props: {
427
771
  clickable: true,
428
- onClick: fn
772
+ disable: true
429
773
  }
430
774
  })
431
775
 
432
- wrapper.get('.q-chip')
433
- .trigger('click')
776
+ await wrapper.trigger('click')
434
777
 
435
- expect(fn).toHaveBeenCalledTimes(1)
778
+ const eventList = wrapper.emitted()
779
+ expect(eventList).not.toHaveProperty('click')
436
780
  })
437
781
 
438
- test('should not emit "click" event when "clickable" prop is false', () => {
439
- const fn = vi.fn()
440
- const wrapper = mountQChip({
782
+ test('is NOT emitting when disable + selected', async () => {
783
+ const wrapper = mount(QChip, {
441
784
  props: {
442
- clickable: false,
443
- onClick: fn
785
+ selected: true,
786
+ disable: true
444
787
  }
445
788
  })
446
789
 
447
- wrapper.get('.q-chip')
448
- .trigger('click')
790
+ await wrapper.trigger('click')
449
791
 
450
- expect(fn).not.toHaveBeenCalled()
792
+ const eventList = wrapper.emitted()
793
+ expect(eventList).not.toHaveProperty('click')
451
794
  })
452
795
  })
453
796
 
454
- describe('[(event): update:selected]', () => {
455
- test('should update selected value when called', () => {
456
- const fn = vi.fn()
457
- const wrapper = mountQChip({
797
+ describe('[(event)update:selected]', () => {
798
+ test('is defined correctly', () => {
799
+ expect(
800
+ QChip.emits?.includes('update:selected')
801
+ ^ (QChip.props?.[ 'onUpdate:selected' ] !== void 0)
802
+ ).toBe(1)
803
+ })
804
+
805
+ test('is emitting', async () => {
806
+ const wrapper = mount(QChip, {
458
807
  props: {
459
808
  selected: false,
460
- 'onUpdate:selected': fn
809
+ 'onUpdate:selected': val => {
810
+ wrapper.setProps({ selected: val })
811
+ }
461
812
  }
462
813
  })
463
814
 
464
- wrapper.get('.q-chip')
465
- .trigger('click')
815
+ await wrapper.trigger('click')
816
+ await flushPromises()
466
817
 
467
- expect(
468
- wrapper.find('.q-chip')
469
- .exists()
470
- ).toBe(true)
818
+ const eventList = wrapper.emitted()
819
+ expect(eventList).toHaveProperty('update:selected')
820
+ expect(eventList[ 'update:selected' ]).toHaveLength(1)
471
821
 
472
- expect(fn).toHaveBeenCalledTimes(1)
822
+ const [ state ] = eventList[ 'update:selected' ][ 0 ]
823
+ expect(state).toBeTypeOf('boolean')
473
824
  })
474
825
 
475
- test('should not emit update:selected event when "selected" prop is not set', () => {
476
- const fn = vi.fn()
477
- const wrapper = mountQChip({
826
+ test('is NOT emitting when disable', async () => {
827
+ const wrapper = mount(QChip, {
478
828
  props: {
479
- selected: undefined,
480
- 'onUpdate:selected': fn
829
+ disable: true,
830
+ selected: false,
831
+ 'onUpdate:selected': val => {
832
+ wrapper.setProps({ selected: val })
833
+ }
481
834
  }
482
835
  })
483
836
 
484
- wrapper.get('.q-chip')
485
- .trigger('click')
837
+ await wrapper.trigger('click')
838
+ await flushPromises()
486
839
 
487
- expect(
488
- wrapper.find('.q-chip')
489
- .exists()
490
- ).toBe(true)
491
-
492
- expect(fn).not.toHaveBeenCalled()
840
+ const eventList = wrapper.emitted()
841
+ expect(eventList).not.toHaveProperty('update:selected')
493
842
  })
494
843
  })
495
844
 
496
845
  describe('[(event)remove]', () => {
497
- test('should emit remove event when clicked and "removable" prop is true', () => {
498
- const fn = vi.fn()
499
- const wrapper = mountQChip({
846
+ test('is defined correctly', () => {
847
+ expect(
848
+ QChip.emits?.includes('remove')
849
+ ^ (QChip.props?.onRemove !== void 0)
850
+ ).toBe(1)
851
+ })
852
+
853
+ test('is emitting', async () => {
854
+ const wrapper = mount(QChip, {
500
855
  props: {
501
- removable: true,
502
- onRemove: fn
856
+ removable: true
503
857
  }
504
858
  })
505
859
 
506
- wrapper.get('.q-chip')
507
- .get('.q-icon.q-chip__icon--remove')
860
+ await wrapper.get('.q-chip__icon--remove')
508
861
  .trigger('click')
509
862
 
510
- expect(fn).toHaveBeenCalledTimes(1)
863
+ const eventList = wrapper.emitted()
864
+ expect(eventList).toHaveProperty('remove')
865
+ expect(eventList.remove).toHaveLength(1)
866
+
867
+ expect(eventList.remove[ 0 ]).toHaveLength(0)
868
+ })
869
+ })
870
+
871
+ describe('[(event)update:model-value]', () => {
872
+ test('is defined correctly', () => {
873
+ expect(
874
+ QChip.emits?.includes('update:modelValue')
875
+ ^ (QChip.props?.[ 'onUpdate:modelValue' ] !== void 0)
876
+ ).toBe(1)
511
877
  })
512
878
 
513
- test('should not emit remove event when "removable" prop is false', () => {
514
- const fn = vi.fn()
515
- const wrapper = mountQChip({
879
+ test('is emitting', async () => {
880
+ const wrapper = mount(QChip, {
516
881
  props: {
517
- removable: false,
518
- onRemove: fn
882
+ removable: true,
883
+ modelValue: true,
884
+ 'onUpdate:modelValue': val => {
885
+ wrapper.setProps({ modelValue: val })
886
+ }
519
887
  }
520
888
  })
521
889
 
522
- wrapper.get('.q-chip')
890
+ await wrapper.get('.q-chip__icon--remove')
523
891
  .trigger('click')
524
892
 
525
- expect(
526
- wrapper.find('.q-chip')
527
- .exists()
528
- ).toBe(true)
893
+ const eventList = wrapper.emitted()
894
+ expect(eventList).toHaveProperty('update:modelValue')
895
+ expect(eventList[ 'update:modelValue' ]).toHaveLength(1)
529
896
 
530
- expect(fn).not.toHaveBeenCalled()
897
+ const [ value ] = eventList[ 'update:modelValue' ][ 0 ]
898
+ expect(value).toBe(false)
531
899
  })
532
900
  })
533
901
  })