quasar 2.15.3 → 2.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (582) hide show
  1. package/dist/api/AppFullscreen.json +1 -1
  2. package/dist/api/Brand.json +1 -1
  3. package/dist/api/QBreadcrumbs.json +1 -1
  4. package/dist/api/QBreadcrumbsEl.json +1 -1
  5. package/dist/api/QBtnDropdown.json +1 -1
  6. package/dist/api/QCarousel.json +1 -1
  7. package/dist/api/QCheckbox.json +1 -1
  8. package/dist/api/QCircularProgress.json +1 -1
  9. package/dist/api/QDialog.json +1 -1
  10. package/dist/api/QDrawer.json +1 -1
  11. package/dist/api/QEditor.json +1 -1
  12. package/dist/api/QExpansionItem.json +1 -1
  13. package/dist/api/QFab.json +1 -1
  14. package/dist/api/QFabAction.json +1 -1
  15. package/dist/api/QField.json +1 -1
  16. package/dist/api/QFile.json +1 -1
  17. package/dist/api/QImg.json +1 -1
  18. package/dist/api/QInnerLoading.json +1 -1
  19. package/dist/api/QInput.json +1 -1
  20. package/dist/api/QIntersection.json +1 -1
  21. package/dist/api/QItem.json +1 -1
  22. package/dist/api/QKnob.json +1 -1
  23. package/dist/api/QMenu.json +1 -1
  24. package/dist/api/QPage.json +1 -1
  25. package/dist/api/QPagination.json +1 -1
  26. package/dist/api/QParallax.json +1 -1
  27. package/dist/api/QPopupEdit.json +1 -1
  28. package/dist/api/QRadio.json +1 -1
  29. package/dist/api/QRange.json +1 -1
  30. package/dist/api/QRouteTab.json +1 -1
  31. package/dist/api/QSelect.json +1 -1
  32. package/dist/api/QSeparator.json +1 -1
  33. package/dist/api/QSkeleton.json +1 -1
  34. package/dist/api/QSlider.json +1 -1
  35. package/dist/api/QSpinner.json +1 -1
  36. package/dist/api/QSpinnerAudio.json +1 -1
  37. package/dist/api/QSpinnerBall.json +1 -1
  38. package/dist/api/QSpinnerBars.json +1 -1
  39. package/dist/api/QSpinnerBox.json +1 -1
  40. package/dist/api/QSpinnerClock.json +1 -1
  41. package/dist/api/QSpinnerComment.json +1 -1
  42. package/dist/api/QSpinnerCube.json +1 -1
  43. package/dist/api/QSpinnerDots.json +1 -1
  44. package/dist/api/QSpinnerFacebook.json +1 -1
  45. package/dist/api/QSpinnerGears.json +1 -1
  46. package/dist/api/QSpinnerGrid.json +1 -1
  47. package/dist/api/QSpinnerHearts.json +1 -1
  48. package/dist/api/QSpinnerHourglass.json +1 -1
  49. package/dist/api/QSpinnerInfinity.json +1 -1
  50. package/dist/api/QSpinnerIos.json +1 -1
  51. package/dist/api/QSpinnerOrbit.json +1 -1
  52. package/dist/api/QSpinnerOval.json +1 -1
  53. package/dist/api/QSpinnerPie.json +1 -1
  54. package/dist/api/QSpinnerPuff.json +1 -1
  55. package/dist/api/QSpinnerRadio.json +1 -1
  56. package/dist/api/QSpinnerRings.json +1 -1
  57. package/dist/api/QSpinnerTail.json +1 -1
  58. package/dist/api/QSplitter.json +1 -1
  59. package/dist/api/QStepper.json +1 -1
  60. package/dist/api/QTabPanels.json +1 -1
  61. package/dist/api/QTable.json +1 -1
  62. package/dist/api/QTimeline.json +1 -1
  63. package/dist/api/QToggle.json +1 -1
  64. package/dist/api/QTooltip.json +1 -1
  65. package/dist/api/QTree.json +1 -1
  66. package/dist/api/QVirtualScroll.json +1 -1
  67. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  68. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  69. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  70. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  71. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  72. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  73. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  74. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  75. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  76. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  77. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  78. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  79. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  80. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  81. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  82. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  83. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  84. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  85. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  86. package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
  87. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  88. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  89. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  90. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  91. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  92. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  93. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  94. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  95. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  96. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  97. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  98. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  99. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +1 -1
  100. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
  101. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
  102. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  103. package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
  104. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  105. package/dist/icon-set/themify.umd.prod.js +1 -1
  106. package/dist/lang/ar-TN.umd.prod.js +1 -1
  107. package/dist/lang/ar.umd.prod.js +1 -1
  108. package/dist/lang/az-Latn.umd.prod.js +1 -1
  109. package/dist/lang/bg.umd.prod.js +1 -1
  110. package/dist/lang/bn.umd.prod.js +1 -1
  111. package/dist/lang/ca.umd.prod.js +1 -1
  112. package/dist/lang/cs.umd.prod.js +1 -1
  113. package/dist/lang/da.umd.prod.js +1 -1
  114. package/dist/lang/de-CH.umd.prod.js +1 -1
  115. package/dist/lang/de-DE.umd.prod.js +1 -1
  116. package/dist/lang/de.umd.prod.js +1 -1
  117. package/dist/lang/el.umd.prod.js +1 -1
  118. package/dist/lang/en-GB.umd.prod.js +1 -1
  119. package/dist/lang/en-US.umd.prod.js +1 -1
  120. package/dist/lang/eo.umd.prod.js +1 -1
  121. package/dist/lang/es.umd.prod.js +1 -1
  122. package/dist/lang/et.umd.prod.js +1 -1
  123. package/dist/lang/eu.umd.prod.js +1 -1
  124. package/dist/lang/fa-IR.umd.prod.js +1 -1
  125. package/dist/lang/fa.umd.prod.js +1 -1
  126. package/dist/lang/fi.umd.prod.js +1 -1
  127. package/dist/lang/fr.umd.prod.js +1 -1
  128. package/dist/lang/gn.umd.prod.js +1 -1
  129. package/dist/lang/he.umd.prod.js +1 -1
  130. package/dist/lang/hi.umd.prod.js +1 -1
  131. package/dist/lang/hr.umd.prod.js +1 -1
  132. package/dist/lang/hu.umd.prod.js +1 -1
  133. package/dist/lang/id.umd.prod.js +1 -1
  134. package/dist/lang/is.umd.prod.js +1 -1
  135. package/dist/lang/it.umd.prod.js +1 -1
  136. package/dist/lang/ja.umd.prod.js +1 -1
  137. package/dist/lang/kk.umd.prod.js +1 -1
  138. package/dist/lang/km.umd.prod.js +1 -1
  139. package/dist/lang/ko-KR.umd.prod.js +1 -1
  140. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  141. package/dist/lang/lt.umd.prod.js +1 -1
  142. package/dist/lang/lu.umd.prod.js +1 -1
  143. package/dist/lang/lv.umd.prod.js +1 -1
  144. package/dist/lang/mk.umd.prod.js +1 -1
  145. package/dist/lang/ml.umd.prod.js +1 -1
  146. package/dist/lang/mm.umd.prod.js +1 -1
  147. package/dist/lang/ms-MY.umd.prod.js +1 -1
  148. package/dist/lang/ms.umd.prod.js +1 -1
  149. package/dist/lang/my.umd.prod.js +1 -1
  150. package/dist/lang/nb-NO.umd.prod.js +1 -1
  151. package/dist/lang/nl.umd.prod.js +1 -1
  152. package/dist/lang/pl.umd.prod.js +1 -1
  153. package/dist/lang/pt-BR.umd.prod.js +1 -1
  154. package/dist/lang/pt.umd.prod.js +1 -1
  155. package/dist/lang/ro.umd.prod.js +1 -1
  156. package/dist/lang/ru.umd.prod.js +1 -1
  157. package/dist/lang/sk.umd.prod.js +1 -1
  158. package/dist/lang/sl.umd.prod.js +1 -1
  159. package/dist/lang/sm.umd.prod.js +1 -1
  160. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  161. package/dist/lang/sr.umd.prod.js +1 -1
  162. package/dist/lang/sv.umd.prod.js +1 -1
  163. package/dist/lang/ta.umd.prod.js +1 -1
  164. package/dist/lang/th.umd.prod.js +1 -1
  165. package/dist/lang/tl.umd.prod.js +1 -1
  166. package/dist/lang/tr.umd.prod.js +1 -1
  167. package/dist/lang/ug.umd.prod.js +1 -1
  168. package/dist/lang/uk.umd.prod.js +1 -1
  169. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  170. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  171. package/dist/lang/vi.umd.prod.js +1 -1
  172. package/dist/lang/zh-CN.umd.prod.js +1 -1
  173. package/dist/lang/zh-TW.umd.prod.js +1 -1
  174. package/dist/{quasar.esm.js → quasar.client.js} +337 -364
  175. package/dist/quasar.sass +1 -1
  176. package/dist/quasar.server.prod.cjs +127 -0
  177. package/dist/quasar.server.prod.js +127 -0
  178. package/dist/quasar.umd.js +337 -363
  179. package/dist/quasar.umd.prod.js +8 -8
  180. package/dist/transforms/api-list.json +1 -1
  181. package/dist/types/index.d.ts +191 -93
  182. package/dist/vetur/quasar-attributes.json +1 -1
  183. package/dist/vetur/quasar-tags.json +1 -1
  184. package/dist/web-types/web-types.json +1 -1
  185. package/icon-set/bootstrap-icons.js +3 -8
  186. package/icon-set/eva-icons.js +3 -8
  187. package/icon-set/fontawesome-v5-pro.js +1 -6
  188. package/icon-set/fontawesome-v5.js +1 -6
  189. package/icon-set/fontawesome-v6-pro.js +1 -6
  190. package/icon-set/fontawesome-v6.js +1 -6
  191. package/icon-set/ionicons-v4.js +3 -8
  192. package/icon-set/line-awesome.js +1 -6
  193. package/icon-set/material-icons-outlined.js +1 -6
  194. package/icon-set/material-icons-round.js +1 -6
  195. package/icon-set/material-icons-sharp.js +1 -6
  196. package/icon-set/material-icons.js +1 -6
  197. package/icon-set/material-symbols-outlined.js +1 -6
  198. package/icon-set/material-symbols-rounded.js +1 -6
  199. package/icon-set/material-symbols-sharp.js +1 -6
  200. package/icon-set/mdi-v3.js +1 -6
  201. package/icon-set/mdi-v4.js +1 -6
  202. package/icon-set/mdi-v5.js +1 -6
  203. package/icon-set/mdi-v6.js +1 -6
  204. package/icon-set/mdi-v7.js +1 -6
  205. package/icon-set/svg-bootstrap-icons.js +6 -6
  206. package/icon-set/svg-eva-icons.js +6 -6
  207. package/icon-set/svg-fontawesome-v5.js +3 -3
  208. package/icon-set/svg-fontawesome-v6.js +4 -5
  209. package/icon-set/svg-ionicons-v4.js +6 -6
  210. package/icon-set/svg-ionicons-v5.js +5 -5
  211. package/icon-set/svg-ionicons-v6.js +5 -5
  212. package/icon-set/svg-line-awesome.js +4 -5
  213. package/icon-set/svg-material-icons-outlined.js +4 -5
  214. package/icon-set/svg-material-icons-round.js +4 -5
  215. package/icon-set/svg-material-icons-sharp.js +4 -5
  216. package/icon-set/svg-material-icons.js +4 -5
  217. package/icon-set/svg-material-symbols-outlined.js +4 -4
  218. package/icon-set/svg-material-symbols-rounded.js +4 -4
  219. package/icon-set/svg-material-symbols-sharp.js +4 -4
  220. package/icon-set/svg-mdi-v6.js +4 -5
  221. package/icon-set/svg-mdi-v7.js +4 -4
  222. package/icon-set/svg-themify.js +6 -6
  223. package/icon-set/themify.js +3 -8
  224. package/lang/ar-TN.js +1 -6
  225. package/lang/ar.js +1 -6
  226. package/lang/az-Latn.js +1 -6
  227. package/lang/bg.js +1 -6
  228. package/lang/bn.js +1 -6
  229. package/lang/ca.js +1 -6
  230. package/lang/cs.js +1 -6
  231. package/lang/da.js +1 -6
  232. package/lang/de-CH.js +1 -6
  233. package/lang/de-DE.js +1 -6
  234. package/lang/de.js +1 -6
  235. package/lang/el.js +1 -6
  236. package/lang/en-GB.js +1 -6
  237. package/lang/en-US.js +1 -6
  238. package/lang/eo.js +1 -6
  239. package/lang/es.js +1 -6
  240. package/lang/et.js +1 -6
  241. package/lang/eu.js +1 -6
  242. package/lang/fa-IR.js +1 -6
  243. package/lang/fa.js +1 -6
  244. package/lang/fi.js +1 -6
  245. package/lang/fr.js +1 -6
  246. package/lang/gn.js +1 -6
  247. package/lang/he.js +1 -6
  248. package/lang/hi.js +1 -6
  249. package/lang/hr.js +1 -6
  250. package/lang/hu.js +1 -6
  251. package/lang/id.js +1 -6
  252. package/lang/is.js +1 -6
  253. package/lang/it.js +1 -6
  254. package/lang/ja.js +1 -6
  255. package/lang/kk.js +1 -6
  256. package/lang/km.js +1 -6
  257. package/lang/ko-KR.js +1 -6
  258. package/lang/kur-CKB.js +1 -6
  259. package/lang/lt.js +1 -6
  260. package/lang/lu.js +1 -6
  261. package/lang/lv.js +1 -6
  262. package/lang/mk.js +1 -6
  263. package/lang/ml.js +1 -6
  264. package/lang/mm.js +1 -6
  265. package/lang/ms-MY.js +1 -6
  266. package/lang/ms.js +1 -6
  267. package/lang/my.js +1 -6
  268. package/lang/nb-NO.js +1 -6
  269. package/lang/nl.js +1 -6
  270. package/lang/pl.js +1 -6
  271. package/lang/pt-BR.js +1 -6
  272. package/lang/pt.js +1 -6
  273. package/lang/ro.js +1 -6
  274. package/lang/ru.js +1 -6
  275. package/lang/sk.js +1 -6
  276. package/lang/sl.js +1 -6
  277. package/lang/sm.js +1 -6
  278. package/lang/sr-CYR.js +1 -6
  279. package/lang/sr.js +1 -6
  280. package/lang/sv.js +1 -6
  281. package/lang/ta.js +1 -6
  282. package/lang/th.js +1 -6
  283. package/lang/tl.js +1 -6
  284. package/lang/tr.js +1 -6
  285. package/lang/ug.js +1 -6
  286. package/lang/uk.js +1 -6
  287. package/lang/uz-Cyrl.js +1 -6
  288. package/lang/uz-Latn.js +1 -6
  289. package/lang/vi.js +1 -6
  290. package/lang/zh-CN.js +1 -6
  291. package/lang/zh-TW.js +1 -6
  292. package/package.json +20 -9
  293. package/src/components/avatar/QAvatar.test.js +0 -28
  294. package/src/components/badge/QBadge.test.js +0 -36
  295. package/src/components/banner/QBanner.test.js +0 -16
  296. package/src/components/bar/QBar.test.js +0 -8
  297. package/src/components/breadcrumbs/QBreadcrumbs.json +2 -1
  298. package/src/components/breadcrumbs/QBreadcrumbs.test.js +1 -21
  299. package/src/components/breadcrumbs/QBreadcrumbsEl.test.js +0 -51
  300. package/src/components/btn/QBtn.json +6 -1
  301. package/src/components/btn/QBtn.test.js +0 -143
  302. package/src/components/btn/use-btn.js +8 -4
  303. package/src/components/btn/use-btn.test.js +9 -1
  304. package/src/components/btn-dropdown/QBtnDropdown.js +3 -3
  305. package/src/components/btn-dropdown/QBtnDropdown.json +1 -4
  306. package/src/components/btn-toggle/QBtnToggle.json +3 -1
  307. package/src/components/card/QCardActions.json +1 -0
  308. package/src/components/carousel/QCarousel.js +4 -3
  309. package/src/components/carousel/QCarousel.json +6 -3
  310. package/src/components/checkbox/use-checkbox.json +1 -1
  311. package/src/components/chip/QChip.test.js +0 -108
  312. package/src/components/circular-progress/QCircularProgress.json +0 -1
  313. package/src/components/color/QColor.json +1 -0
  314. package/src/components/date/QDate.js +8 -2
  315. package/src/components/date/QDate.json +1 -0
  316. package/src/components/date/use-datetime.js +1 -3
  317. package/src/components/dialog/QDialog.js +1 -2
  318. package/src/components/dialog/QDialog.json +11 -1
  319. package/src/components/dialog/QDialog.test.js +38 -160
  320. package/src/components/drawer/QDrawer.json +2 -2
  321. package/src/components/editor/QEditor.js +3 -8
  322. package/src/components/editor/QEditor.json +9 -2
  323. package/src/components/expansion-item/QExpansionItem.js +1 -1
  324. package/src/components/expansion-item/QExpansionItem.json +5 -6
  325. package/src/components/fab/QFab.js +1 -0
  326. package/src/components/fab/QFab.json +5 -4
  327. package/src/components/fab/QFabAction.json +2 -1
  328. package/src/components/fab/use-fab.json +2 -1
  329. package/src/components/field/QField.json +0 -39
  330. package/src/components/file/QFile.js +2 -2
  331. package/src/components/file/QFile.json +2 -7
  332. package/src/components/footer/QFooter.json +3 -1
  333. package/src/components/form/QForm.js +1 -1
  334. package/src/components/header/QHeader.json +3 -1
  335. package/src/components/img/QImg.json +1 -1
  336. package/src/components/infinite-scroll/QInfiniteScroll.js +7 -6
  337. package/src/components/inner-loading/QInnerLoading.js +1 -1
  338. package/src/components/inner-loading/QInnerLoading.json +1 -0
  339. package/src/components/input/QInput.js +2 -1
  340. package/src/components/input/QInput.json +7 -24
  341. package/src/components/intersection/QIntersection.json +1 -1
  342. package/src/components/item/QItem.json +3 -1
  343. package/src/components/knob/QKnob.json +11 -2
  344. package/src/components/menu/QMenu.js +2 -4
  345. package/src/components/menu/QMenu.json +3 -1
  346. package/src/components/option-group/QOptionGroup.js +1 -0
  347. package/src/components/page/QPage.json +1 -2
  348. package/src/components/page-scroller/QPageScroller.js +1 -0
  349. package/src/components/page-scroller/QPageScroller.json +4 -0
  350. package/src/components/page-sticky/QPageSticky.js +1 -1
  351. package/src/components/pagination/QPagination.json +7 -2
  352. package/src/components/parallax/QParallax.js +2 -4
  353. package/src/components/parallax/QParallax.json +1 -0
  354. package/src/components/popup-edit/QPopupEdit.json +2 -1
  355. package/src/components/pull-to-refresh/QPullToRefresh.js +2 -4
  356. package/src/components/radio/QRadio.json +2 -2
  357. package/src/components/range/QRange.json +1 -0
  358. package/src/components/scroll-observer/QScrollObserver.js +2 -4
  359. package/src/components/select/QSelect.js +7 -7
  360. package/src/components/select/QSelect.json +27 -16
  361. package/src/components/separator/QSeparator.json +0 -1
  362. package/src/components/skeleton/QSkeleton.json +1 -1
  363. package/src/components/slider/QSlider.json +1 -0
  364. package/src/components/slider/use-slider.js +0 -2
  365. package/src/components/spinner/QSpinner.json +1 -5
  366. package/src/components/spinner/QSpinner.test.js +79 -0
  367. package/src/components/spinner/QSpinnerAudio.test.js +59 -0
  368. package/src/components/spinner/QSpinnerBall.test.js +59 -0
  369. package/src/components/spinner/QSpinnerBars.test.js +59 -0
  370. package/src/components/spinner/QSpinnerBox.test.js +59 -0
  371. package/src/components/spinner/QSpinnerClock.test.js +59 -0
  372. package/src/components/spinner/QSpinnerComment.test.js +59 -0
  373. package/src/components/spinner/QSpinnerCube.test.js +59 -0
  374. package/src/components/spinner/QSpinnerDots.test.js +59 -0
  375. package/src/components/spinner/QSpinnerFacebook.test.js +59 -0
  376. package/src/components/spinner/QSpinnerGears.test.js +59 -0
  377. package/src/components/spinner/QSpinnerGrid.test.js +59 -0
  378. package/src/components/spinner/QSpinnerHearts.test.js +59 -0
  379. package/src/components/spinner/QSpinnerHourglass.test.js +59 -0
  380. package/src/components/spinner/QSpinnerInfinity.test.js +59 -0
  381. package/src/components/spinner/QSpinnerIos.test.js +59 -0
  382. package/src/components/spinner/QSpinnerOrbit.test.js +59 -0
  383. package/src/components/spinner/QSpinnerOval.test.js +59 -0
  384. package/src/components/spinner/QSpinnerPie.test.js +59 -0
  385. package/src/components/spinner/QSpinnerPuff.test.js +59 -0
  386. package/src/components/spinner/QSpinnerRadio.test.js +59 -0
  387. package/src/components/spinner/QSpinnerRings.test.js +59 -0
  388. package/src/components/spinner/QSpinnerTail.test.js +59 -0
  389. package/src/components/spinner/spinner.json +5 -0
  390. package/src/components/spinner/use-spinner.js +1 -1
  391. package/src/components/spinner/use-spinner.test.js +59 -0
  392. package/src/components/splitter/QSplitter.json +3 -3
  393. package/src/components/stepper/QStep.json +6 -0
  394. package/src/components/tab-panels/QTabPanels.json +6 -0
  395. package/src/components/table/QTable.js +6 -8
  396. package/src/components/table/QTable.json +13 -8
  397. package/src/components/table/QTh.json +4 -0
  398. package/src/components/tabs/QRouteTab.json +3 -2
  399. package/src/components/tabs/QTab.json +1 -65
  400. package/src/components/tabs/use-tab.json +72 -0
  401. package/src/components/time/QTime.js +6 -0
  402. package/src/components/time/QTime.json +2 -0
  403. package/src/components/timeline/QTimeline.json +2 -1
  404. package/src/components/toolbar/QToolbar.test.js +41 -0
  405. package/src/components/toolbar/QToolbarTitle.test.js +41 -0
  406. package/src/components/tooltip/QTooltip.js +6 -6
  407. package/src/components/tooltip/QTooltip.json +6 -15
  408. package/src/components/tree/QTree.js +1 -1
  409. package/src/components/tree/QTree.json +2 -1
  410. package/src/components/uploader/xhr-uploader-plugin.js +1 -3
  411. package/src/components/video/QVideo.test.js +0 -24
  412. package/src/components/virtual-scroll/QVirtualScroll.js +2 -4
  413. package/src/components/virtual-scroll/QVirtualScroll.json +0 -1
  414. package/src/components/virtual-scroll/use-virtual-scroll.js +2 -2
  415. package/src/components/virtual-scroll/use-virtual-scroll.json +1 -1
  416. package/src/composables/private.use-anchor/use-anchor-static.json +22 -0
  417. package/src/composables/private.use-anchor/use-anchor.js +13 -4
  418. package/src/composables/private.use-anchor/use-anchor.json +2 -19
  419. package/src/composables/private.use-field/use-field.js +6 -3
  420. package/src/composables/private.use-field/use-field.json +22 -0
  421. package/src/composables/private.use-fullscreen/use-fullscreen.json +10 -0
  422. package/src/composables/private.use-model-toggle/use-model-toggle.json +4 -2
  423. package/src/composables/private.use-panel/use-panel.json +3 -0
  424. package/src/composables/private.use-portal/use-portal.js +1 -1
  425. package/src/composables/private.use-router-link/use-router-link.js +15 -9
  426. package/src/composables/private.use-router-link/use-router-link.json +2 -0
  427. package/src/composables/private.use-validate/use-validate.json +1 -0
  428. package/src/composables/use-id/use-id.test.js +0 -1
  429. package/src/composables/use-interval/use-interval.test.js +173 -0
  430. package/src/composables/use-render-cache/use-render-cache.js +2 -2
  431. package/src/composables/use-render-cache/use-render-cache.test.js +73 -0
  432. package/src/composables/use-split-attrs/use-split-attrs.test.js +55 -0
  433. package/src/composables/use-tick/use-tick.test.js +118 -0
  434. package/src/composables/use-timeout/use-timeout.test.js +169 -0
  435. package/src/install-quasar.js +1 -1
  436. package/src/plugins/addressbar/AddressbarColor.test.js +53 -0
  437. package/src/plugins/app-fullscreen/AppFullscreen.js +1 -1
  438. package/src/plugins/app-fullscreen/AppFullscreen.json +3 -1
  439. package/src/plugins/app-fullscreen/AppFullscreen.test.js +206 -0
  440. package/src/plugins/app-fullscreen/test/mock-fullscreen.js +43 -0
  441. package/src/plugins/app-visibility/AppVisibility.test.js +45 -0
  442. package/src/plugins/bottom-sheet/BottomSheet.js +1 -1
  443. package/src/plugins/bottom-sheet/BottomSheet.json +1 -1
  444. package/src/plugins/dark/Dark.test.js +158 -0
  445. package/src/plugins/dialog/Dialog.js +1 -1
  446. package/src/plugins/dialog/Dialog.json +1 -1
  447. package/src/plugins/icon-set/IconSet.js +1 -2
  448. package/src/plugins/icon-set/IconSet.test.js +2 -2
  449. package/src/plugins/lang/Lang.js +1 -2
  450. package/src/plugins/lang/Lang.test.js +2 -2
  451. package/src/plugins/loading/Loading.js +1 -1
  452. package/src/plugins/loading-bar/LoadingBar.js +1 -1
  453. package/src/plugins/notify/Notify.js +1 -1
  454. package/src/plugins/platform/Platform.js +2 -1
  455. package/src/plugins/private.body/Body.test.js +28 -0
  456. package/src/plugins/private.history/History.test.js +38 -0
  457. package/src/plugins/screen/Screen.test.js +453 -0
  458. package/src/utils/css-var/get-css-var.test.js +12 -0
  459. package/src/utils/css-var/set-css-var.test.js +18 -0
  460. package/src/utils/dom/dom.test.js +222 -0
  461. package/src/utils/{private.global/global-config.test.js → private.config/instance-config.test.js} +2 -2
  462. package/src/utils/{private.global/global-nodes.js → private.config/nodes.js} +1 -1
  463. package/src/utils/{private.global/global-nodes.test.js → private.config/nodes.test.js} +3 -3
  464. package/src/utils/{private.global/global-dialog.js → private.dialog/create-dialog.js} +1 -1
  465. package/src/utils/private.render/render.test.js +187 -0
  466. package/src/utils/private.selection/selection.test.js +40 -0
  467. package/src/utils/private.vm/vm.test.js +175 -0
  468. package/src/utils/scroll/scroll.js +4 -0
  469. package/wrappers/{index.mjs → index.cjs} +15 -15
  470. package/wrappers/index.js +15 -15
  471. package/dist/quasar.cjs.prod.js +0 -127
  472. package/dist/quasar.esm.prod.js +0 -127
  473. package/dist/transforms/import-transformation.js +0 -9
  474. package/icon-set/bootstrap-icons.mjs +0 -136
  475. package/icon-set/eva-icons.mjs +0 -186
  476. package/icon-set/fontawesome-v5-pro.mjs +0 -128
  477. package/icon-set/fontawesome-v5.mjs +0 -128
  478. package/icon-set/fontawesome-v6-pro.mjs +0 -128
  479. package/icon-set/fontawesome-v6.mjs +0 -128
  480. package/icon-set/ionicons-v4.mjs +0 -180
  481. package/icon-set/line-awesome.mjs +0 -128
  482. package/icon-set/material-icons-outlined.mjs +0 -128
  483. package/icon-set/material-icons-round.mjs +0 -128
  484. package/icon-set/material-icons-sharp.mjs +0 -128
  485. package/icon-set/material-icons.mjs +0 -128
  486. package/icon-set/material-symbols-outlined.mjs +0 -128
  487. package/icon-set/material-symbols-rounded.mjs +0 -128
  488. package/icon-set/material-symbols-sharp.mjs +0 -128
  489. package/icon-set/mdi-v3.mjs +0 -141
  490. package/icon-set/mdi-v4.mjs +0 -141
  491. package/icon-set/mdi-v5.mjs +0 -141
  492. package/icon-set/mdi-v6.mjs +0 -141
  493. package/icon-set/mdi-v7.mjs +0 -141
  494. package/icon-set/svg-bootstrap-icons.mjs +0 -210
  495. package/icon-set/svg-eva-icons.mjs +0 -233
  496. package/icon-set/svg-fontawesome-v5.mjs +0 -197
  497. package/icon-set/svg-fontawesome-v6.mjs +0 -198
  498. package/icon-set/svg-ionicons-v4.mjs +0 -234
  499. package/icon-set/svg-ionicons-v5.mjs +0 -225
  500. package/icon-set/svg-ionicons-v6.mjs +0 -224
  501. package/icon-set/svg-line-awesome.mjs +0 -198
  502. package/icon-set/svg-material-icons-outlined.mjs +0 -203
  503. package/icon-set/svg-material-icons-round.mjs +0 -203
  504. package/icon-set/svg-material-icons-sharp.mjs +0 -203
  505. package/icon-set/svg-material-icons.mjs +0 -203
  506. package/icon-set/svg-material-symbols-outlined.mjs +0 -201
  507. package/icon-set/svg-material-symbols-rounded.mjs +0 -201
  508. package/icon-set/svg-material-symbols-sharp.mjs +0 -201
  509. package/icon-set/svg-mdi-v6.mjs +0 -225
  510. package/icon-set/svg-mdi-v7.mjs +0 -224
  511. package/icon-set/svg-themify.mjs +0 -231
  512. package/icon-set/themify.mjs +0 -169
  513. package/lang/ar-TN.mjs +0 -98
  514. package/lang/ar.mjs +0 -98
  515. package/lang/az-Latn.mjs +0 -93
  516. package/lang/bg.mjs +0 -93
  517. package/lang/bn.mjs +0 -93
  518. package/lang/ca.mjs +0 -93
  519. package/lang/cs.mjs +0 -104
  520. package/lang/da.mjs +0 -93
  521. package/lang/de-CH.mjs +0 -93
  522. package/lang/de-DE.mjs +0 -93
  523. package/lang/de.mjs +0 -93
  524. package/lang/el.mjs +0 -93
  525. package/lang/en-GB.mjs +0 -93
  526. package/lang/en-US.mjs +0 -93
  527. package/lang/eo.mjs +0 -93
  528. package/lang/es.mjs +0 -93
  529. package/lang/et.mjs +0 -93
  530. package/lang/eu.mjs +0 -93
  531. package/lang/fa-IR.mjs +0 -94
  532. package/lang/fa.mjs +0 -94
  533. package/lang/fi.mjs +0 -94
  534. package/lang/fr.mjs +0 -96
  535. package/lang/gn.mjs +0 -93
  536. package/lang/he.mjs +0 -94
  537. package/lang/hi.mjs +0 -93
  538. package/lang/hr.mjs +0 -93
  539. package/lang/hu.mjs +0 -93
  540. package/lang/id.mjs +0 -93
  541. package/lang/is.mjs +0 -93
  542. package/lang/it.mjs +0 -93
  543. package/lang/ja.mjs +0 -92
  544. package/lang/kk.mjs +0 -97
  545. package/lang/km.mjs +0 -93
  546. package/lang/ko-KR.mjs +0 -93
  547. package/lang/kur-CKB.mjs +0 -103
  548. package/lang/lt.mjs +0 -105
  549. package/lang/lu.mjs +0 -93
  550. package/lang/lv.mjs +0 -93
  551. package/lang/mk.mjs +0 -93
  552. package/lang/ml.mjs +0 -97
  553. package/lang/mm.mjs +0 -94
  554. package/lang/ms-MY.mjs +0 -96
  555. package/lang/ms.mjs +0 -93
  556. package/lang/my.mjs +0 -92
  557. package/lang/nb-NO.mjs +0 -94
  558. package/lang/nl.mjs +0 -93
  559. package/lang/pl.mjs +0 -93
  560. package/lang/pt-BR.mjs +0 -93
  561. package/lang/pt.mjs +0 -93
  562. package/lang/ro.mjs +0 -93
  563. package/lang/ru.mjs +0 -97
  564. package/lang/sk.mjs +0 -93
  565. package/lang/sl.mjs +0 -93
  566. package/lang/sm.mjs +0 -93
  567. package/lang/sr-CYR.mjs +0 -93
  568. package/lang/sr.mjs +0 -93
  569. package/lang/sv.mjs +0 -93
  570. package/lang/ta.mjs +0 -93
  571. package/lang/th.mjs +0 -93
  572. package/lang/tl.mjs +0 -93
  573. package/lang/tr.mjs +0 -89
  574. package/lang/ug.mjs +0 -93
  575. package/lang/uk.mjs +0 -97
  576. package/lang/uz-Cyrl.mjs +0 -95
  577. package/lang/uz-Latn.mjs +0 -99
  578. package/lang/vi.mjs +0 -93
  579. package/lang/zh-CN.mjs +0 -92
  580. package/lang/zh-TW.mjs +0 -92
  581. /package/src/utils/{private.global/global-config.js → private.config/instance-config.js} +0 -0
  582. /package/src/utils/{private.global/global-dialog.json → private.dialog/create-dialog.json} +0 -0
@@ -0,0 +1,206 @@
1
+ import { describe, test, expect, afterEach } from 'vitest'
2
+ import { mount, config } from '@vue/test-utils'
3
+
4
+ // jsdom hack
5
+ // this import should always sit before the AppFullscreen one
6
+ import { createMockedEl } from './test/mock-fullscreen.js'
7
+
8
+ import AppFullscreen from './AppFullscreen.js'
9
+
10
+ const mountPlugin = () => mount({ template: '<div />' })
11
+
12
+ // We override Quasar install so it installs this plugin
13
+ const quasarVuePlugin = config.global.plugins.find(entry => entry.name === 'Quasar')
14
+ const { install } = quasarVuePlugin
15
+ quasarVuePlugin.install = app => install(app, { plugins: { AppFullscreen } })
16
+
17
+ afterEach(async () => {
18
+ // ensure we don't leave test in fullscreen state
19
+ await AppFullscreen.exit()
20
+ })
21
+
22
+ describe('[AppFullscreen API]', () => {
23
+ describe('[Injection]', () => {
24
+ test('is injected into $q', () => {
25
+ const wrapper = mountPlugin()
26
+ expect(AppFullscreen).toMatchObject(wrapper.vm.$q.fullscreen)
27
+ })
28
+ })
29
+
30
+ describe('[Props]', () => {
31
+ describe('[(prop)isCapable]', () => {
32
+ test('is correct type', () => {
33
+ mountPlugin()
34
+ expect(AppFullscreen.isCapable).toBeTypeOf('boolean')
35
+ })
36
+ })
37
+
38
+ describe('[(prop)isActive]', () => {
39
+ test('is correct type', () => {
40
+ mountPlugin()
41
+ expect(AppFullscreen.isActive).toBeTypeOf('boolean')
42
+ })
43
+
44
+ test('is reactive', async () => {
45
+ mountPlugin()
46
+
47
+ expect(AppFullscreen.isActive).toBe(false)
48
+ await AppFullscreen.request()
49
+ expect(AppFullscreen.isActive).toBe(true)
50
+
51
+ await AppFullscreen.exit()
52
+ expect(AppFullscreen.isActive).toBe(false)
53
+ })
54
+ })
55
+
56
+ describe('[(prop)activeEl]', () => {
57
+ test('is correct type', () => {
58
+ mountPlugin()
59
+ expect(AppFullscreen.activeEl).$any([
60
+ expect.any(Element),
61
+ null
62
+ ])
63
+ })
64
+
65
+ test('is reactive', async () => {
66
+ mountPlugin()
67
+
68
+ expect(AppFullscreen.activeEl).toBe(null)
69
+ await AppFullscreen.request()
70
+ expect(AppFullscreen.activeEl).not.toBe(null)
71
+
72
+ await AppFullscreen.exit()
73
+ expect(AppFullscreen.activeEl).toBe(null)
74
+ })
75
+ })
76
+ })
77
+
78
+ describe('[Methods]', () => {
79
+ describe('[(method)request]', () => {
80
+ test('request()', async () => {
81
+ mountPlugin()
82
+
83
+ const result = AppFullscreen.request()
84
+ expect(
85
+ result
86
+ ).toBeInstanceOf(Promise)
87
+
88
+ await result
89
+ expect(AppFullscreen.isActive).toBe(true)
90
+ expect(AppFullscreen.activeEl).not.toBe(null)
91
+
92
+ await AppFullscreen.exit()
93
+ expect(AppFullscreen.isActive).toBe(false)
94
+ expect(AppFullscreen.activeEl).toBe(null)
95
+ })
96
+
97
+ test('request(el)', async () => {
98
+ mountPlugin()
99
+
100
+ const el = createMockedEl()
101
+
102
+ const result = AppFullscreen.request(el)
103
+ expect(
104
+ result
105
+ ).toBeInstanceOf(Promise)
106
+
107
+ await result
108
+
109
+ expect(el.requestFullscreen).toHaveBeenCalledTimes(1)
110
+ expect(AppFullscreen.isActive).toBe(true)
111
+ expect(AppFullscreen.activeEl).toBe(el)
112
+
113
+ await AppFullscreen.exit()
114
+ expect(AppFullscreen.isActive).toBe(false)
115
+ expect(AppFullscreen.activeEl).toBe(null)
116
+ })
117
+
118
+ test('call request(el) 2 times', async () => {
119
+ mountPlugin()
120
+
121
+ const el = createMockedEl()
122
+
123
+ const result = AppFullscreen.request(el)
124
+ expect(
125
+ result
126
+ ).toBeInstanceOf(Promise)
127
+
128
+ await result
129
+ expect(el.requestFullscreen).toHaveBeenCalledTimes(1)
130
+ expect(AppFullscreen.activeEl).toBe(el)
131
+
132
+ await AppFullscreen.request(el)
133
+ expect(el.requestFullscreen).toHaveBeenCalledTimes(1)
134
+ expect(AppFullscreen.activeEl).toBe(el)
135
+
136
+ await AppFullscreen.exit()
137
+ expect(AppFullscreen.activeEl).toBe(null)
138
+ })
139
+ })
140
+
141
+ describe('[(method)exit]', () => {
142
+ test('should be callable', () => {
143
+ mountPlugin()
144
+ expect(
145
+ AppFullscreen.exit()
146
+ ).toBeInstanceOf(Promise)
147
+ })
148
+
149
+ test('request() + exit()', async () => {
150
+ mountPlugin()
151
+
152
+ const result = AppFullscreen.request()
153
+ expect(
154
+ result
155
+ ).toBeInstanceOf(Promise)
156
+
157
+ await result
158
+ expect(AppFullscreen.isActive).toBe(true)
159
+ expect(AppFullscreen.activeEl).not.toBe(null)
160
+
161
+ await AppFullscreen.exit()
162
+ expect(AppFullscreen.isActive).toBe(false)
163
+ expect(AppFullscreen.activeEl).toBe(null)
164
+ })
165
+ })
166
+
167
+ describe('[(method)toggle]', () => {
168
+ test('toggle()', async () => {
169
+ mountPlugin()
170
+
171
+ const result = AppFullscreen.toggle()
172
+ expect(
173
+ result
174
+ ).toBeInstanceOf(Promise)
175
+
176
+ await result
177
+ expect(AppFullscreen.isActive).toBe(true)
178
+ expect(AppFullscreen.activeEl).not.toBe(null)
179
+
180
+ await AppFullscreen.toggle()
181
+ expect(AppFullscreen.isActive).toBe(false)
182
+ expect(AppFullscreen.activeEl).toBe(null)
183
+ })
184
+
185
+ test('toggle(el)', async () => {
186
+ mountPlugin()
187
+
188
+ const el = createMockedEl()
189
+
190
+ const result = AppFullscreen.toggle(el)
191
+ expect(
192
+ result
193
+ ).toBeInstanceOf(Promise)
194
+
195
+ await result
196
+ expect(el.requestFullscreen).toHaveBeenCalledTimes(1)
197
+ expect(AppFullscreen.isActive).toBe(true)
198
+ expect(AppFullscreen.activeEl).toBe(el)
199
+
200
+ await AppFullscreen.toggle()
201
+ expect(AppFullscreen.isActive).toBe(false)
202
+ expect(AppFullscreen.activeEl).toBe(null)
203
+ })
204
+ })
205
+ })
206
+ })
@@ -0,0 +1,43 @@
1
+ import { vi, onTestFinished } from 'vitest'
2
+
3
+ /**
4
+ * jsdom does not support Fullscreen API,
5
+ * so we mock the functionality
6
+ */
7
+
8
+ export function mockedRequestFullscreen (el = document.documentElement) {
9
+ document.fullscreenElement = el
10
+ mockedToggleFullscreen()
11
+ }
12
+
13
+ export function mockedExitFullscreen () {
14
+ document.fullscreenElement = null
15
+ mockedToggleFullscreen()
16
+ }
17
+
18
+ export function mockedToggleFullscreen () {
19
+ document.onfullscreenchange()
20
+ }
21
+
22
+ export function createMockedEl () {
23
+ const el = document.createElement('div')
24
+ el.setAttribute('tabindex', '0')
25
+ document.body.appendChild(el)
26
+
27
+ el.requestFullscreen = vi.fn(() => {
28
+ document.fullscreenElement = el
29
+ mockedToggleFullscreen()
30
+ })
31
+
32
+ el.exitFullscreen = mockedExitFullscreen
33
+
34
+ onTestFinished(() => { el.remove() })
35
+
36
+ return el
37
+ }
38
+
39
+ document.documentElement.requestFullscreen = mockedRequestFullscreen
40
+ document.documentElement.exitFullscreen = mockedExitFullscreen
41
+
42
+ document.requestFullscreen = mockedRequestFullscreen
43
+ document.exitFullscreen = mockedExitFullscreen
@@ -0,0 +1,45 @@
1
+ import { describe, test, expect } from 'vitest'
2
+ import { mount, config } from '@vue/test-utils'
3
+
4
+ import AppVisibility from './AppVisibility.js'
5
+
6
+ const mountPlugin = () => mount({ template: '<div />' })
7
+
8
+ // We override Quasar install so it installs this plugin
9
+ const quasarVuePlugin = config.global.plugins.find(entry => entry.name === 'Quasar')
10
+ const { install } = quasarVuePlugin
11
+ quasarVuePlugin.install = app => install(app, { plugins: { AppVisibility } })
12
+
13
+ describe('[AppVisibility API]', () => {
14
+ describe('[Injection]', () => {
15
+ test('is injected into $q', () => {
16
+ const wrapper = mountPlugin()
17
+ expect(wrapper.vm.$q.appVisible).toBe(AppVisibility.appVisible)
18
+ })
19
+ })
20
+
21
+ describe('[Props]', () => {
22
+ describe('[(prop)appVisible]', () => {
23
+ test('is correct type', () => {
24
+ mountPlugin()
25
+ expect(AppVisibility.appVisible).toBe(true)
26
+ })
27
+
28
+ test('is reactive', () => {
29
+ const wrapper = mountPlugin()
30
+ expect(AppVisibility.appVisible).toBe(true)
31
+
32
+ // jsdom hack
33
+ Object.defineProperty(document, 'hidden', {
34
+ configurable: true,
35
+ get: () => true
36
+ })
37
+
38
+ document.dispatchEvent(new Event('visibilitychange'))
39
+
40
+ expect(AppVisibility.appVisible).toBe(false)
41
+ expect(wrapper.vm.$q.appVisible).toBe(false)
42
+ })
43
+ })
44
+ })
45
+ })
@@ -1,5 +1,5 @@
1
1
  import BottomSheet from './component/BottomSheetComponent.js'
2
- import globalDialog from '../../utils/private.global/global-dialog.js'
2
+ import globalDialog from '../../utils/private.dialog/create-dialog.js'
3
3
 
4
4
  export default {
5
5
  install ({ $q, parentApp }) {
@@ -1,5 +1,5 @@
1
1
  {
2
- "mixins": [ "utils/private.global/global-dialog" ],
2
+ "mixins": [ "utils/private.dialog/create-dialog" ],
3
3
 
4
4
  "meta": {
5
5
  "docsUrl": "https://v2.quasar.dev/quasar-plugins/bottom-sheet"
@@ -0,0 +1,158 @@
1
+ import { describe, test, expect, vi } from 'vitest'
2
+ import { mount } from '@vue/test-utils'
3
+
4
+ import Dark from './Dark.js'
5
+
6
+ const mountPlugin = () => mount({ template: '<div />' })
7
+
8
+ describe('[Dark API]', () => {
9
+ describe('[Injection]', () => {
10
+ test('is injected into $q', () => {
11
+ const wrapper = mountPlugin()
12
+ expect(Dark).toMatchObject(wrapper.vm.$q.dark)
13
+ })
14
+ })
15
+
16
+ describe('[Props]', () => {
17
+ describe('[(prop)isActive]', () => {
18
+ test('is correct type', () => {
19
+ mountPlugin()
20
+ expect(Dark.isActive).toBeTypeOf('boolean')
21
+ })
22
+
23
+ test('is reactive', () => {
24
+ const { vm: { $q } } = mountPlugin()
25
+
26
+ expect(Dark.isActive).toBe(false)
27
+ expect($q.dark.isActive).toBe(false)
28
+ expect(
29
+ document.body.classList.contains('body--dark')
30
+ ).toBe(false)
31
+
32
+ Dark.set(true)
33
+
34
+ expect(Dark.isActive).toBe(true)
35
+ expect($q.dark.isActive).toBe(true)
36
+ expect(
37
+ document.body.classList.contains('body--dark')
38
+ ).toBe(true)
39
+ })
40
+ })
41
+
42
+ describe('[(prop)mode]', () => {
43
+ test('is correct type', () => {
44
+ mountPlugin()
45
+ expect([ 'auto', true, false ]).toContain(Dark.mode)
46
+ })
47
+ })
48
+ })
49
+
50
+ describe('[Methods]', () => {
51
+ describe('[(method)set]', () => {
52
+ test('should be callable', () => {
53
+ const { vm: { $q } } = mountPlugin()
54
+
55
+ expect(
56
+ Dark.set(true)
57
+ ).toBeUndefined()
58
+
59
+ expect(Dark.isActive).toBe(true)
60
+ expect($q.dark.isActive).toBe(true)
61
+ expect(
62
+ document.body.classList.contains('body--dark')
63
+ ).toBe(true)
64
+
65
+ expect(
66
+ Dark.set(false)
67
+ ).toBeUndefined()
68
+
69
+ expect(Dark.isActive).toBe(false)
70
+ expect($q.dark.isActive).toBe(false)
71
+ expect(
72
+ document.body.classList.contains('body--dark')
73
+ ).toBe(false)
74
+ })
75
+
76
+ test('should handle auto mode', () => {
77
+ const { vm: { $q } } = mountPlugin()
78
+
79
+ // jsdom hack
80
+ const media = {
81
+ matches: true,
82
+ addListener: vi.fn(),
83
+ removeListener: vi.fn()
84
+ }
85
+ window.matchMedia = vi.fn(() => media)
86
+
87
+ Dark.set('auto')
88
+
89
+ expect(Dark.mode).toBe('auto')
90
+
91
+ expect(media.addListener).toHaveBeenCalledTimes(1)
92
+ expect(media.removeListener).not.toHaveBeenCalled()
93
+
94
+ expect(Dark.isActive).toBe(true)
95
+ expect($q.dark.isActive).toBe(true)
96
+ expect(
97
+ document.body.classList.contains('body--dark')
98
+ ).toBe(true)
99
+
100
+ media.matches = false
101
+ Dark.__updateMedia()
102
+
103
+ expect(media.addListener).toHaveBeenCalledTimes(1)
104
+ expect(media.removeListener).not.toHaveBeenCalled()
105
+
106
+ expect(Dark.isActive).toBe(false)
107
+ expect($q.dark.isActive).toBe(false)
108
+ expect(
109
+ document.body.classList.contains('body--dark')
110
+ ).toBe(false)
111
+
112
+ Dark.set(true)
113
+ expect(Dark.mode).not.toBe('auto')
114
+
115
+ expect(media.addListener).toHaveBeenCalledTimes(1)
116
+ expect(media.removeListener).toHaveBeenCalledTimes(1)
117
+
118
+ expect(Dark.isActive).toBe(true)
119
+ expect($q.dark.isActive).toBe(true)
120
+ expect(
121
+ document.body.classList.contains('body--dark')
122
+ ).toBe(true)
123
+ })
124
+ })
125
+
126
+ describe('[(method)toggle]', () => {
127
+ test('should be callable', () => {
128
+ const { vm: { $q } } = mountPlugin()
129
+
130
+ Dark.set(true)
131
+
132
+ expect(Dark.isActive).toBe(true)
133
+ expect($q.dark.isActive).toBe(true)
134
+ expect(
135
+ document.body.classList.contains('body--dark')
136
+ ).toBe(true)
137
+
138
+ expect(
139
+ Dark.toggle()
140
+ ).toBeUndefined()
141
+
142
+ expect(Dark.isActive).toBe(false)
143
+ expect($q.dark.isActive).toBe(false)
144
+ expect(
145
+ document.body.classList.contains('body--dark')
146
+ ).toBe(false)
147
+
148
+ Dark.toggle()
149
+
150
+ expect(Dark.isActive).toBe(true)
151
+ expect($q.dark.isActive).toBe(true)
152
+ expect(
153
+ document.body.classList.contains('body--dark')
154
+ ).toBe(true)
155
+ })
156
+ })
157
+ })
158
+ })
@@ -1,5 +1,5 @@
1
1
  import DialogPlugin from './component/DialogPluginComponent.js'
2
- import globalDialog from '../../utils/private.global/global-dialog.js'
2
+ import globalDialog from '../../utils/private.dialog/create-dialog.js'
3
3
 
4
4
  export default {
5
5
  install ({ $q, parentApp }) {
@@ -1,5 +1,5 @@
1
1
  {
2
- "mixins": [ "utils/private.global/global-dialog" ],
2
+ "mixins": [ "utils/private.dialog/create-dialog" ],
3
3
 
4
4
  "meta": {
5
5
  "docsUrl": "https://v2.quasar.dev/quasar-plugins/dialog"
@@ -1,8 +1,7 @@
1
1
  import { createReactivePlugin } from '../../utils/private.create/create.js'
2
2
  import { injectProp } from '../../utils/private.inject-obj-prop/inject-obj-prop.js'
3
3
 
4
- // no extension on purpose for next one:
5
- import materialIcons from '../../../icon-set/material-icons'
4
+ import materialIcons from '../../../icon-set/material-icons.js'
6
5
 
7
6
  const Plugin = createReactivePlugin({
8
7
  iconMapFn: null,
@@ -330,13 +330,13 @@ describe('[IconSet API]', () => {
330
330
 
331
331
  test('should work with an imported icon set', async () => {
332
332
  const { vm: { $q } } = mountPlugin()
333
- const { default: newIconSet } = await import('quasar/icon-set/fontawesome-v6.mjs')
333
+ const { default: newIconSet } = await import('quasar/icon-set/fontawesome-v6.js')
334
334
 
335
335
  IconSet.set(newIconSet)
336
336
  expect(IconSet.props.name).toBe(newIconSet.name)
337
337
  expect($q.iconSet.name).toBe(newIconSet.name)
338
338
 
339
- const { default: anotherIconSet } = await import('quasar/icon-set/ionicons-v4.mjs')
339
+ const { default: anotherIconSet } = await import('quasar/icon-set/ionicons-v4.js')
340
340
  $q.iconSet.set(anotherIconSet)
341
341
  expect(IconSet.props.name).toBe(anotherIconSet.name)
342
342
  expect($q.iconSet.name).toBe(anotherIconSet.name)
@@ -1,7 +1,6 @@
1
1
  import { createReactivePlugin } from '../../utils/private.create/create.js'
2
2
 
3
- // no extension on purpose for next one:
4
- import defaultLang from '../../../lang/en-US'
3
+ import defaultLang from '../../../lang/en-US.js'
5
4
 
6
5
  function getLocale () {
7
6
  if (__QUASAR_SSR_SERVER__) return
@@ -231,13 +231,13 @@ describe('[Lang API]', () => {
231
231
 
232
232
  test('should work with an imported lang pack', async () => {
233
233
  const { vm: { $q } } = mountPlugin()
234
- const { default: deLang } = await import('quasar/lang/de-DE.mjs')
234
+ const { default: deLang } = await import('quasar/lang/de-DE.js')
235
235
 
236
236
  Lang.set(deLang)
237
237
  expect(Lang.props.nativeName).toBe(deLang.nativeName)
238
238
  expect($q.lang.nativeName).toBe(deLang.nativeName)
239
239
 
240
- const { default: itLang } = await import('quasar/lang/it.mjs')
240
+ const { default: itLang } = await import('quasar/lang/it.js')
241
241
  $q.lang.set(itLang)
242
242
  expect(Lang.props.nativeName).toBe(itLang.nativeName)
243
243
  expect($q.lang.nativeName).toBe(itLang.nativeName)
@@ -5,7 +5,7 @@ import QSpinner from '../../components/spinner/QSpinner.js'
5
5
  import { createChildApp } from '../../install-quasar.js'
6
6
 
7
7
  import { createReactivePlugin } from '../../utils/private.create/create.js'
8
- import { createGlobalNode, removeGlobalNode } from '../../utils/private.global/global-nodes.js'
8
+ import { createGlobalNode, removeGlobalNode } from '../../utils/private.config/nodes.js'
9
9
  import preventScroll from '../../utils/scroll/prevent-scroll.js'
10
10
  import { isObject } from '../../utils/is/is.js'
11
11
 
@@ -5,7 +5,7 @@ import { createChildApp } from '../../install-quasar.js'
5
5
 
6
6
  import { createReactivePlugin } from '../../utils/private.create/create.js'
7
7
  import { noop } from '../../utils/event/event.js'
8
- import { createGlobalNode } from '../../utils/private.global/global-nodes.js'
8
+ import { createGlobalNode } from '../../utils/private.config/nodes.js'
9
9
  import { isObject } from '../../utils/is/is.js'
10
10
 
11
11
  const barRef = ref(null)
@@ -9,7 +9,7 @@ import { createChildApp } from '../../install-quasar.js'
9
9
 
10
10
  import { createComponent } from '../../utils/private.create/create.js'
11
11
  import { noop } from '../../utils/event/event.js'
12
- import { createGlobalNode } from '../../utils/private.global/global-nodes.js'
12
+ import { createGlobalNode } from '../../utils/private.config/nodes.js'
13
13
  import { isObject } from '../../utils/is/is.js'
14
14
 
15
15
  let uid = 0
@@ -124,8 +124,9 @@ function getPlatform (UA) {
124
124
  browser.firefox = true
125
125
  matched.browser = 'firefox'
126
126
  }
127
+
127
128
  // Set iOS if on iPod, iPad or iPhone
128
- else if (browser.ipod || browser.ipad || browser.iphone) {
129
+ if (browser.ipod || browser.ipad || browser.iphone) {
129
130
  browser.ios = true
130
131
  }
131
132
 
@@ -0,0 +1,28 @@
1
+ import { describe, test, expect } from 'vitest'
2
+ import { mount } from '@vue/test-utils'
3
+
4
+ import Body from './Body.js'
5
+
6
+ const mountPlugin = () => mount({ template: '<div />' })
7
+
8
+ describe('[Body API]', () => {
9
+ describe('[Functions]', () => {
10
+ describe('[(function)install]', () => {
11
+ test('should be defined correctly', () => {
12
+ expect(Body).toBeTypeOf('object')
13
+
14
+ expect(
15
+ Body.install
16
+ ).toBeTypeOf('function')
17
+ })
18
+
19
+ test('sets body classes', () => {
20
+ mountPlugin()
21
+
22
+ expect(
23
+ document.body.getAttribute('class')
24
+ ).toBe('desktop touch body--light')
25
+ })
26
+ })
27
+ })
28
+ })
@@ -0,0 +1,38 @@
1
+ import { describe, test, expect } from 'vitest'
2
+
3
+ import History from './History.js'
4
+
5
+ /**
6
+ * Can't really fully test it since it handles
7
+ * Capacitor and Cordova platforms
8
+ */
9
+
10
+ describe('[History API]', () => {
11
+ describe('[Variables]', () => {
12
+ describe('[(variable)__history]', () => {
13
+ test('is defined correctly', () => {
14
+ expect(Array.isArray(History.__history)).toBe(true)
15
+ })
16
+ })
17
+
18
+ describe('[(variable)add]', () => {
19
+ test('is defined correctly', () => {
20
+ expect(History.add).toBeTypeOf('function')
21
+ })
22
+ })
23
+
24
+ describe('[(variable)remove]', () => {
25
+ test('is defined correctly', () => {
26
+ expect(History.remove).toBeTypeOf('function')
27
+ })
28
+ })
29
+ })
30
+
31
+ describe('[Functions]', () => {
32
+ describe('[(function)install]', () => {
33
+ test('is defined correctly', () => {
34
+ expect(History.install).toBeTypeOf('function')
35
+ })
36
+ })
37
+ })
38
+ })