quasar 2.5.4 → 2.6.1

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 (374) hide show
  1. package/README.md +1 -1
  2. package/dist/api/BottomSheet.json +1 -1
  3. package/dist/api/Dialog.json +9 -2
  4. package/dist/api/Notify.json +205 -5
  5. package/dist/api/QAvatar.json +1 -1
  6. package/dist/api/QBreadcrumbsEl.json +1 -1
  7. package/dist/api/QBtn.json +2 -2
  8. package/dist/api/QBtnDropdown.json +3 -3
  9. package/dist/api/QCarousel.json +3 -3
  10. package/dist/api/QChip.json +4 -4
  11. package/dist/api/QExpansionItem.json +2 -2
  12. package/dist/api/QFab.json +2 -2
  13. package/dist/api/QFabAction.json +1 -1
  14. package/dist/api/QForm.json +4 -1
  15. package/dist/api/QIcon.json +4 -2
  16. package/dist/api/QKnob.json +5 -0
  17. package/dist/api/QPagination.json +4 -4
  18. package/dist/api/QRouteTab.json +1 -1
  19. package/dist/api/QSelect.json +9 -10
  20. package/dist/api/QStep.json +4 -4
  21. package/dist/api/QStepper.json +4 -4
  22. package/dist/api/QTab.json +1 -1
  23. package/dist/api/QTimelineEntry.json +1 -1
  24. package/dist/api/QToggle.json +1 -1
  25. package/dist/api/QTree.json +1 -1
  26. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  27. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  28. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  29. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  30. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +6 -0
  31. package/dist/icon-set/fontawesome-v6.umd.prod.js +6 -0
  32. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  33. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  34. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  35. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  36. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  37. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  38. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  39. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  40. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  41. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  42. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +2 -2
  43. package/dist/icon-set/svg-eva-icons.umd.prod.js +2 -2
  44. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +6 -0
  45. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  46. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  47. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +2 -2
  48. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  49. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  50. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  51. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  52. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  53. package/dist/icon-set/svg-mdi-v6.umd.prod.js +2 -2
  54. package/dist/icon-set/svg-themify.umd.prod.js +2 -2
  55. package/dist/icon-set/themify.umd.prod.js +1 -1
  56. package/dist/lang/ar.umd.prod.js +1 -1
  57. package/dist/lang/az-Latn.umd.prod.js +1 -1
  58. package/dist/lang/bg.umd.prod.js +1 -1
  59. package/dist/lang/bn.umd.prod.js +1 -1
  60. package/dist/lang/ca.umd.prod.js +1 -1
  61. package/dist/lang/cs.umd.prod.js +1 -1
  62. package/dist/lang/da.umd.prod.js +1 -1
  63. package/dist/lang/de.umd.prod.js +1 -1
  64. package/dist/lang/el.umd.prod.js +1 -1
  65. package/dist/lang/en-GB.umd.prod.js +1 -1
  66. package/dist/lang/en-US.umd.prod.js +1 -1
  67. package/dist/lang/eo.umd.prod.js +1 -1
  68. package/dist/lang/es.umd.prod.js +1 -1
  69. package/dist/lang/et.umd.prod.js +1 -1
  70. package/dist/lang/eu.umd.prod.js +6 -0
  71. package/dist/lang/fa-IR.umd.prod.js +1 -1
  72. package/dist/lang/fa.umd.prod.js +1 -1
  73. package/dist/lang/fi.umd.prod.js +1 -1
  74. package/dist/lang/fr.umd.prod.js +1 -1
  75. package/dist/lang/gn.umd.prod.js +1 -1
  76. package/dist/lang/he.umd.prod.js +1 -1
  77. package/dist/lang/hr.umd.prod.js +1 -1
  78. package/dist/lang/hu.umd.prod.js +1 -1
  79. package/dist/lang/id.umd.prod.js +1 -1
  80. package/dist/lang/is.umd.prod.js +1 -1
  81. package/dist/lang/it.umd.prod.js +1 -1
  82. package/dist/lang/ja.umd.prod.js +1 -1
  83. package/dist/lang/km.umd.prod.js +1 -1
  84. package/dist/lang/ko-KR.umd.prod.js +1 -1
  85. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  86. package/dist/lang/kz.umd.prod.js +6 -0
  87. package/dist/lang/lt.umd.prod.js +1 -1
  88. package/dist/lang/lu.umd.prod.js +1 -1
  89. package/dist/lang/lv.umd.prod.js +1 -1
  90. package/dist/lang/ml.umd.prod.js +1 -1
  91. package/dist/lang/ms.umd.prod.js +1 -1
  92. package/dist/lang/my.umd.prod.js +1 -1
  93. package/dist/lang/nb-NO.umd.prod.js +1 -1
  94. package/dist/lang/nl.umd.prod.js +1 -1
  95. package/dist/lang/pl.umd.prod.js +1 -1
  96. package/dist/lang/pt-BR.umd.prod.js +1 -1
  97. package/dist/lang/pt.umd.prod.js +1 -1
  98. package/dist/lang/ro.umd.prod.js +1 -1
  99. package/dist/lang/ru.umd.prod.js +1 -1
  100. package/dist/lang/sk.umd.prod.js +1 -1
  101. package/dist/lang/sl.umd.prod.js +1 -1
  102. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  103. package/dist/lang/sr.umd.prod.js +1 -1
  104. package/dist/lang/sv.umd.prod.js +1 -1
  105. package/dist/lang/ta.umd.prod.js +1 -1
  106. package/dist/lang/th.umd.prod.js +1 -1
  107. package/dist/lang/tr.umd.prod.js +1 -1
  108. package/dist/lang/ug.umd.prod.js +2 -2
  109. package/dist/lang/uk.umd.prod.js +1 -1
  110. package/dist/lang/vi.umd.prod.js +1 -1
  111. package/dist/lang/zh-CN.umd.prod.js +1 -1
  112. package/dist/lang/zh-TW.umd.prod.js +1 -1
  113. package/dist/quasar.cjs.prod.js +2 -2
  114. package/dist/quasar.css +4 -6
  115. package/dist/quasar.esm.prod.js +2 -2
  116. package/dist/quasar.prod.css +1 -1
  117. package/dist/quasar.rtl.css +4 -6
  118. package/dist/quasar.rtl.prod.css +1 -1
  119. package/dist/quasar.sass +3 -1
  120. package/dist/quasar.umd.js +501 -455
  121. package/dist/quasar.umd.prod.js +2 -2
  122. package/dist/types/extras/icon-set.d.ts +3 -0
  123. package/dist/types/globals.d.ts +2 -2
  124. package/dist/types/index.d.ts +154 -50
  125. package/dist/vetur/quasar-attributes.json +42 -38
  126. package/dist/vetur/quasar-tags.json +1 -0
  127. package/dist/web-types/web-types.json +50 -40
  128. package/icon-set/bootstrap-icons.js +11 -6
  129. package/icon-set/bootstrap-icons.mjs +136 -0
  130. package/icon-set/eva-icons.js +10 -5
  131. package/icon-set/{svg-mdi-v4.js → eva-icons.mjs} +62 -94
  132. package/icon-set/fontawesome-v5-pro.js +6 -1
  133. package/icon-set/fontawesome-v5-pro.mjs +128 -0
  134. package/icon-set/fontawesome-v5.js +6 -1
  135. package/icon-set/fontawesome-v5.mjs +128 -0
  136. package/icon-set/fontawesome-v6-pro.js +133 -0
  137. package/icon-set/fontawesome-v6-pro.mjs +128 -0
  138. package/icon-set/fontawesome-v6.js +133 -0
  139. package/icon-set/fontawesome-v6.mjs +128 -0
  140. package/icon-set/ionicons-v4.js +10 -5
  141. package/icon-set/ionicons-v4.mjs +180 -0
  142. package/icon-set/line-awesome.js +6 -1
  143. package/icon-set/line-awesome.mjs +128 -0
  144. package/icon-set/material-icons-outlined.js +6 -1
  145. package/icon-set/material-icons-outlined.mjs +128 -0
  146. package/icon-set/material-icons-round.js +6 -1
  147. package/icon-set/material-icons-round.mjs +128 -0
  148. package/icon-set/material-icons-sharp.js +6 -1
  149. package/icon-set/material-icons-sharp.mjs +128 -0
  150. package/icon-set/material-icons.js +6 -1
  151. package/icon-set/material-icons.mjs +128 -0
  152. package/icon-set/mdi-v3.js +6 -1
  153. package/icon-set/mdi-v3.mjs +141 -0
  154. package/icon-set/mdi-v4.js +6 -1
  155. package/icon-set/mdi-v4.mjs +141 -0
  156. package/icon-set/mdi-v5.js +6 -1
  157. package/icon-set/mdi-v5.mjs +141 -0
  158. package/icon-set/mdi-v6.js +6 -1
  159. package/icon-set/mdi-v6.mjs +141 -0
  160. package/icon-set/svg-bootstrap-icons.js +10 -11
  161. package/icon-set/svg-bootstrap-icons.mjs +210 -0
  162. package/icon-set/svg-eva-icons.js +9 -10
  163. package/icon-set/svg-eva-icons.mjs +233 -0
  164. package/icon-set/svg-fontawesome-v6.js +198 -0
  165. package/icon-set/{svg-fontawesome-v5.js → svg-fontawesome-v6.mjs} +42 -42
  166. package/icon-set/svg-ionicons-v4.js +9 -10
  167. package/icon-set/svg-ionicons-v4.mjs +234 -0
  168. package/icon-set/svg-ionicons-v5.js +7 -7
  169. package/icon-set/svg-ionicons-v5.mjs +225 -0
  170. package/icon-set/svg-ionicons-v6.js +7 -7
  171. package/icon-set/svg-ionicons-v6.mjs +225 -0
  172. package/icon-set/svg-line-awesome.js +5 -5
  173. package/icon-set/svg-line-awesome.mjs +198 -0
  174. package/icon-set/svg-material-icons-outlined.js +5 -5
  175. package/icon-set/svg-material-icons-outlined.mjs +203 -0
  176. package/icon-set/svg-material-icons-round.js +5 -5
  177. package/icon-set/svg-material-icons-round.mjs +203 -0
  178. package/icon-set/svg-material-icons-sharp.js +5 -5
  179. package/icon-set/svg-material-icons-sharp.mjs +203 -0
  180. package/icon-set/svg-material-icons.js +5 -5
  181. package/icon-set/svg-material-icons.mjs +203 -0
  182. package/icon-set/svg-mdi-v6.js +5 -5
  183. package/icon-set/{svg-mdi-v5.js → svg-mdi-v6.mjs} +6 -6
  184. package/icon-set/svg-themify.js +9 -10
  185. package/icon-set/svg-themify.mjs +231 -0
  186. package/icon-set/themify.js +10 -5
  187. package/icon-set/themify.mjs +169 -0
  188. package/lang/ar.js +6 -1
  189. package/lang/ar.mjs +96 -0
  190. package/lang/az-Latn.js +6 -1
  191. package/lang/az-Latn.mjs +91 -0
  192. package/lang/bg.js +6 -1
  193. package/lang/bg.mjs +91 -0
  194. package/lang/bn.js +6 -1
  195. package/lang/bn.mjs +91 -0
  196. package/lang/ca.js +6 -1
  197. package/lang/ca.mjs +91 -0
  198. package/lang/cs.js +6 -1
  199. package/lang/cs.mjs +102 -0
  200. package/lang/da.js +6 -1
  201. package/lang/da.mjs +91 -0
  202. package/lang/de.js +6 -1
  203. package/lang/de.mjs +91 -0
  204. package/lang/el.js +6 -1
  205. package/lang/el.mjs +91 -0
  206. package/lang/en-GB.js +6 -1
  207. package/lang/en-GB.mjs +91 -0
  208. package/lang/en-US.js +6 -1
  209. package/lang/en-US.mjs +91 -0
  210. package/lang/eo.js +6 -1
  211. package/lang/eo.mjs +91 -0
  212. package/lang/es.js +6 -1
  213. package/lang/es.mjs +91 -0
  214. package/lang/et.js +6 -1
  215. package/lang/et.mjs +91 -0
  216. package/lang/eu.js +96 -0
  217. package/lang/eu.mjs +91 -0
  218. package/lang/fa-IR.js +6 -1
  219. package/lang/fa-IR.mjs +92 -0
  220. package/lang/fa.js +6 -1
  221. package/lang/fa.mjs +92 -0
  222. package/lang/fi.js +6 -1
  223. package/lang/fi.mjs +92 -0
  224. package/lang/fr.js +6 -1
  225. package/lang/fr.mjs +94 -0
  226. package/lang/gn.js +6 -1
  227. package/lang/gn.mjs +91 -0
  228. package/lang/he.js +6 -1
  229. package/lang/he.mjs +92 -0
  230. package/lang/hr.js +6 -1
  231. package/lang/hr.mjs +91 -0
  232. package/lang/hu.js +6 -1
  233. package/lang/hu.mjs +91 -0
  234. package/lang/id.js +6 -1
  235. package/lang/id.mjs +91 -0
  236. package/lang/index.json +8 -0
  237. package/lang/is.js +6 -1
  238. package/lang/is.mjs +91 -0
  239. package/lang/it.js +6 -1
  240. package/lang/it.mjs +91 -0
  241. package/lang/ja.js +6 -1
  242. package/lang/ja.mjs +90 -0
  243. package/lang/km.js +6 -1
  244. package/lang/km.mjs +91 -0
  245. package/lang/ko-KR.js +6 -1
  246. package/lang/ko-KR.mjs +91 -0
  247. package/lang/kur-CKB.js +6 -1
  248. package/lang/kur-CKB.mjs +101 -0
  249. package/lang/kz.js +100 -0
  250. package/lang/kz.mjs +95 -0
  251. package/lang/lt.js +6 -1
  252. package/lang/lt.mjs +103 -0
  253. package/lang/lu.js +6 -1
  254. package/lang/lu.mjs +91 -0
  255. package/lang/lv.js +6 -1
  256. package/lang/lv.mjs +91 -0
  257. package/lang/ml.js +6 -1
  258. package/lang/ml.mjs +95 -0
  259. package/lang/ms.js +6 -1
  260. package/lang/ms.mjs +91 -0
  261. package/lang/my.js +6 -1
  262. package/lang/my.mjs +90 -0
  263. package/lang/nb-NO.js +6 -1
  264. package/lang/nb-NO.mjs +92 -0
  265. package/lang/nl.js +6 -1
  266. package/lang/nl.mjs +91 -0
  267. package/lang/pl.js +6 -1
  268. package/lang/pl.mjs +91 -0
  269. package/lang/pt-BR.js +6 -1
  270. package/lang/pt-BR.mjs +91 -0
  271. package/lang/pt.js +6 -1
  272. package/lang/pt.mjs +91 -0
  273. package/lang/ro.js +6 -1
  274. package/lang/ro.mjs +91 -0
  275. package/lang/ru.js +6 -1
  276. package/lang/ru.mjs +95 -0
  277. package/lang/sk.js +6 -1
  278. package/lang/sk.mjs +91 -0
  279. package/lang/sl.js +6 -1
  280. package/lang/sl.mjs +91 -0
  281. package/lang/sr-CYR.js +6 -1
  282. package/lang/sr-CYR.mjs +91 -0
  283. package/lang/sr.js +6 -1
  284. package/lang/sr.mjs +91 -0
  285. package/lang/sv.js +6 -1
  286. package/lang/sv.mjs +91 -0
  287. package/lang/ta.js +6 -1
  288. package/lang/ta.mjs +91 -0
  289. package/lang/th.js +6 -1
  290. package/lang/th.mjs +91 -0
  291. package/lang/tr.js +6 -1
  292. package/lang/tr.mjs +87 -0
  293. package/lang/ug.js +55 -51
  294. package/lang/ug.mjs +91 -0
  295. package/lang/uk.js +7 -2
  296. package/lang/uk.mjs +95 -0
  297. package/lang/vi.js +6 -1
  298. package/lang/vi.mjs +91 -0
  299. package/lang/zh-CN.js +6 -1
  300. package/lang/zh-CN.mjs +90 -0
  301. package/lang/zh-TW.js +6 -1
  302. package/lang/zh-TW.mjs +90 -0
  303. package/package.json +1 -1
  304. package/src/api.extends.json +1 -1
  305. package/src/components/btn/QBtn.js +16 -14
  306. package/src/components/btn/use-btn.js +7 -7
  307. package/src/components/date/QDate.js +20 -19
  308. package/src/components/date/use-datetime.js +3 -1
  309. package/src/components/dialog/QDialog.js +11 -11
  310. package/src/components/dialog-bottom-sheet/BottomSheet.js +11 -11
  311. package/src/components/dialog-plugin/DialogPlugin.js +9 -8
  312. package/src/components/editor/QEditor.js +10 -10
  313. package/src/components/editor/editor-utils.js +2 -2
  314. package/src/components/file/QFile.js +2 -1
  315. package/src/components/form/QForm.json +3 -2
  316. package/src/components/icon/QIcon.js +6 -2
  317. package/src/components/icon/QIcon.json +1 -3
  318. package/src/components/infinite-scroll/QInfiniteScroll.js +3 -1
  319. package/src/components/inner-loading/QInnerLoading.js +7 -7
  320. package/src/components/input/QInput.js +4 -1
  321. package/src/components/knob/QKnob.js +5 -2
  322. package/src/components/knob/QKnob.json +6 -0
  323. package/src/components/linear-progress/QLinearProgress.sass +1 -0
  324. package/src/components/menu/QMenu.js +13 -13
  325. package/src/components/page-scroller/QPageScroller.js +4 -4
  326. package/src/components/pull-to-refresh/QPullToRefresh.js +5 -5
  327. package/src/components/select/QSelect.js +12 -6
  328. package/src/components/select/QSelect.json +4 -7
  329. package/src/components/slide-transition/QSlideTransition.js +4 -4
  330. package/src/components/slider/use-slider.js +4 -4
  331. package/src/components/stepper/QStep.js +6 -6
  332. package/src/components/stepper/QStep.json +3 -0
  333. package/src/components/stepper/QStepper.json +3 -0
  334. package/src/components/stepper/QStepper.sass +1 -0
  335. package/src/components/stepper/StepHeader.js +23 -8
  336. package/src/components/table/table-column-selection.js +6 -6
  337. package/src/components/table/table-sort.js +2 -2
  338. package/src/components/tabs/QTabs.js +4 -4
  339. package/src/components/time/QTime.js +5 -5
  340. package/src/components/tooltip/QTooltip.js +12 -12
  341. package/src/components/uploader/uploader-core.js +11 -10
  342. package/src/components/virtual-scroll/QVirtualScroll.js +3 -3
  343. package/src/components/virtual-scroll/use-virtual-scroll.js +20 -20
  344. package/src/composables/private/use-field.js +25 -17
  345. package/src/composables/private/use-file-dom-props.js +5 -5
  346. package/src/composables/private/use-file.js +15 -12
  347. package/src/composables/private/use-router-link.js +2 -2
  348. package/src/directives/Morph.js +12 -3
  349. package/src/icon-set.js +2 -1
  350. package/src/install-quasar.js +37 -36
  351. package/src/lang.js +2 -1
  352. package/src/plugins/AddressbarColor.js +7 -7
  353. package/src/plugins/Cookies.js +5 -1
  354. package/src/plugins/Dialog.json +3 -2
  355. package/src/plugins/Loading.js +3 -2
  356. package/src/plugins/LoadingBar.js +12 -5
  357. package/src/plugins/Notify.js +11 -4
  358. package/src/plugins/Notify.json +102 -2
  359. package/src/utils/create-meta-mixin.js +4 -4
  360. package/src/utils/create-uploader-component.js +2 -1
  361. package/src/utils/event.js +3 -3
  362. package/src/utils/extend.js +6 -34
  363. package/src/utils/morph.js +19 -17
  364. package/src/utils/private/is.js +3 -14
  365. package/src/utils/private/noop-ssr-directive-transform.js +1 -1
  366. package/src/utils/private/web-storage.js +3 -2
  367. package/wrappers/index.js +33 -5
  368. package/wrappers/index.mjs +63 -0
  369. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +0 -6
  370. package/dist/icon-set/svg-mdi-v4.umd.prod.js +0 -6
  371. package/dist/icon-set/svg-mdi-v5.umd.prod.js +0 -6
  372. package/dist/ssr-directives/Morph.js +0 -55
  373. package/dist/ssr-directives/index.js +0 -14
  374. package/src/directives/Morph.ssr.js +0 -45
@@ -366,14 +366,6 @@ export default function (state) {
366
366
  }, getControlContainer())
367
367
  )
368
368
 
369
- slots.append !== void 0 && node.push(
370
- h('div', {
371
- class: 'q-field__append q-field__marginal row no-wrap items-center',
372
- key: 'append',
373
- onClick: prevent
374
- }, slots.append())
375
- )
376
-
377
369
  hasError.value === true && props.noErrorIcon === false && node.push(
378
370
  getInnerAppendNode('error', [
379
371
  h(QIcon, { name: $q.iconSet.field.error, color: 'negative' })
@@ -407,6 +399,14 @@ export default function (state) {
407
399
  )
408
400
  }
409
401
 
402
+ slots.append !== void 0 && node.push(
403
+ h('div', {
404
+ class: 'q-field__append q-field__marginal row no-wrap items-center',
405
+ key: 'append',
406
+ onClick: prevent
407
+ }, slots.append())
408
+ )
409
+
410
410
  state.getInnerAppend !== void 0 && node.push(
411
411
  getInnerAppendNode('inner-append', state.getInnerAppend())
412
412
  )
@@ -511,8 +511,8 @@ export default function (state) {
511
511
 
512
512
  hasCounter === true
513
513
  ? h('div', {
514
- class: 'q-field__counter'
515
- }, slots.counter !== void 0 ? slots.counter() : state.computedCounter.value)
514
+ class: 'q-field__counter'
515
+ }, slots.counter !== void 0 ? slots.counter() : state.computedCounter.value)
516
516
  : null
517
517
  ])
518
518
  }
@@ -552,6 +552,14 @@ export default function (state) {
552
552
  })
553
553
 
554
554
  return function renderField () {
555
+ const labelAttrs = state.getControl === void 0 && slots.control === void 0
556
+ ? {
557
+ ...state.splitAttrs.attributes.value,
558
+ 'data-autofocus': props.autofocus,
559
+ ...attributes.value
560
+ }
561
+ : attributes.value
562
+
555
563
  return h('label', {
556
564
  ref: state.rootRef,
557
565
  class: [
@@ -559,13 +567,13 @@ export default function (state) {
559
567
  attrs.class
560
568
  ],
561
569
  style: attrs.style,
562
- ...attributes.value
570
+ ...labelAttrs
563
571
  }, [
564
572
  slots.before !== void 0
565
573
  ? h('div', {
566
- class: 'q-field__before q-field__marginal row no-wrap items-center',
567
- onClick: prevent
568
- }, slots.before())
574
+ class: 'q-field__before q-field__marginal row no-wrap items-center',
575
+ onClick: prevent
576
+ }, slots.before())
569
577
  : null,
570
578
 
571
579
  h('div', {
@@ -585,9 +593,9 @@ export default function (state) {
585
593
 
586
594
  slots.after !== void 0
587
595
  ? h('div', {
588
- class: 'q-field__after q-field__marginal row no-wrap items-center',
589
- onClick: prevent
590
- }, slots.after())
596
+ class: 'q-field__after q-field__marginal row no-wrap items-center',
597
+ onClick: prevent
598
+ }, slots.after())
591
599
  : null
592
600
  ])
593
601
  }
@@ -34,11 +34,11 @@ export default function (props, typeGuard) {
34
34
 
35
35
  return typeGuard === true
36
36
  ? computed(() => {
37
- if (props.type !== 'file') {
38
- return
39
- }
37
+ if (props.type !== 'file') {
38
+ return
39
+ }
40
40
 
41
- return getFormDomProps()
42
- })
41
+ return getFormDomProps()
42
+ })
43
43
  : computed(getFormDomProps)
44
44
  }
@@ -1,4 +1,4 @@
1
- import { h, computed, getCurrentInstance } from 'vue'
1
+ import { h, ref, computed, getCurrentInstance } from 'vue'
2
2
 
3
3
  import { stop, stopAndPrevent } from '../../utils/event.js'
4
4
 
@@ -42,18 +42,20 @@ export default function ({
42
42
  }) {
43
43
  const { props, emit, proxy } = getCurrentInstance()
44
44
 
45
+ const dndRef = ref(null)
46
+
45
47
  const extensions = computed(() => (
46
48
  props.accept !== void 0
47
49
  ? props.accept.split(',').map(ext => {
48
- ext = ext.trim()
49
- if (ext === '*') { // support "*"
50
- return '*/'
51
- }
52
- else if (ext.endsWith('/*')) { // support "image/*" or "*/*"
53
- ext = ext.slice(0, ext.length - 1)
54
- }
55
- return ext.toUpperCase()
56
- })
50
+ ext = ext.trim()
51
+ if (ext === '*') { // support "*"
52
+ return '*/'
53
+ }
54
+ else if (ext.endsWith('/*')) { // support "image/*" or "*/*"
55
+ ext = ext.slice(0, ext.length - 1)
56
+ }
57
+ return ext.toUpperCase()
58
+ })
57
59
  : null
58
60
  ))
59
61
 
@@ -118,7 +120,7 @@ export default function ({
118
120
  // Cordova/iOS allows selecting multiple files even when the
119
121
  // multiple attribute is not specified. We also normalize drag'n'dropped
120
122
  // files here:
121
- if (props.multiple !== true) {
123
+ if (props.multiple !== true && files.length > 0) {
122
124
  files = [ files[ 0 ] ]
123
125
  }
124
126
 
@@ -183,7 +185,7 @@ export default function ({
183
185
 
184
186
  function onDragleave (e) {
185
187
  stopAndPrevent(e)
186
- dnd.value = false
188
+ e.relatedTarget !== dndRef.value && (dnd.value = false)
187
189
  }
188
190
 
189
191
  function onDrop (e) {
@@ -200,6 +202,7 @@ export default function ({
200
202
  function getDndNode (type) {
201
203
  if (dnd.value === true) {
202
204
  return h('div', {
205
+ ref: dndRef,
203
206
  class: `q-${ type }__dnd absolute-full`,
204
207
  onDragenter: stopAndPreventDrag,
205
208
  onDragover: stopAndPreventDrag,
@@ -191,8 +191,8 @@ export default function (fallbackTag) {
191
191
  // avoid comparing the child with its parent
192
192
  && currentMatched[ currentMatched.length - 1 ].path !== parentRecordPath
193
193
  ? currentMatched.findIndex(
194
- isSameRouteRecord.bind(null, matched[ length - 2 ])
195
- )
194
+ isSameRouteRecord.bind(null, matched[ length - 2 ])
195
+ )
196
196
  : index
197
197
  )
198
198
  })
@@ -1,8 +1,6 @@
1
1
  import { createDirective } from '../utils/private/create.js'
2
2
  import morph from '../utils/morph.js'
3
3
 
4
- import getSSRProps from './Morph.ssr.js'
5
-
6
4
  const morphGroups = {}
7
5
  const props = [
8
6
  'duration', 'delay', 'easing', 'fill',
@@ -164,7 +162,18 @@ function updateValue (ctx, value) {
164
162
  }
165
163
 
166
164
  export default createDirective(__QUASAR_SSR_SERVER__
167
- ? { name: 'morph', getSSRProps }
165
+ ? {
166
+ name: 'morph',
167
+ getSSRProps: binding => {
168
+ const name = binding.arg
169
+ ? binding.arg.split(':')[ 0 ]
170
+ : false
171
+
172
+ return {
173
+ class: name === binding.value ? '' : 'q-morph--invisible'
174
+ }
175
+ }
176
+ }
168
177
  : {
169
178
  name: 'morph',
170
179
 
package/src/icon-set.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import defineReactivePlugin from './utils/private/define-reactive-plugin.js'
2
- import materialIcons from '../icon-set/material-icons.js'
3
2
  import { injectProp } from './utils/private/inject-obj-prop.js'
3
+ // no extension on purpose for next one:
4
+ import materialIcons from '../icon-set/material-icons'
4
5
 
5
6
  const Plugin = defineReactivePlugin({
6
7
  iconMapFn: null,
@@ -10,6 +10,7 @@ import IconSet from './icon-set.js'
10
10
 
11
11
  import { quasarKey } from './utils/private/symbols.js'
12
12
  import { globalConfig, globalConfigIsFrozen, freezeGlobalConfig } from './utils/private/global-config.js'
13
+ import { isObject } from './utils/private/is.js'
13
14
 
14
15
  const autoInstalledPlugins = [
15
16
  Platform,
@@ -46,13 +47,13 @@ function prepareApp (app, uiOpts, pluginOpts) {
46
47
  installPlugins(pluginOpts, autoInstalledPlugins)
47
48
 
48
49
  uiOpts.components !== void 0 && Object.values(uiOpts.components).forEach(c => {
49
- if (Object(c) === c && c.name !== void 0) {
50
+ if (isObject(c) === true && c.name !== void 0) {
50
51
  app.component(c.name, c)
51
52
  }
52
53
  })
53
54
 
54
55
  uiOpts.directives !== void 0 && Object.values(uiOpts.directives).forEach(d => {
55
- if (Object(d) === d && d.name !== void 0) {
56
+ if (isObject(d) === true && d.name !== void 0) {
56
57
  app.directive(d.name, d)
57
58
  }
58
59
  })
@@ -74,45 +75,45 @@ function prepareApp (app, uiOpts, pluginOpts) {
74
75
 
75
76
  export default __QUASAR_SSR_SERVER__
76
77
  ? function (parentApp, opts = {}, ssrContext) {
77
- const $q = {
78
- version: __QUASAR_VERSION__,
79
- config: opts.config || {}
80
- }
81
-
82
- Object.assign(ssrContext, {
83
- $q,
84
- _meta: {
85
- htmlAttrs: '',
86
- headTags: '',
87
- endingHeadTags: '',
88
- bodyClasses: '',
89
- bodyAttrs: 'data-server-rendered',
90
- bodyTags: ''
91
- }
92
- })
93
-
94
- if (ssrContext._modules === void 0) {
95
- // not OK. means the SSR build is not using @quasar/ssr-helpers,
96
- // but we shouldn't crash the app
97
- ssrContext._modules = []
98
- }
78
+ const $q = {
79
+ version: __QUASAR_VERSION__,
80
+ config: opts.config || {}
81
+ }
99
82
 
100
- if (ssrContext.onRendered === void 0) {
101
- // not OK. means the SSR build is not using @quasar/ssr-helpers,
102
- // but we shouldn't crash the app
103
- ssrContext.onRendered = () => {}
83
+ Object.assign(ssrContext, {
84
+ $q,
85
+ _meta: {
86
+ htmlAttrs: '',
87
+ headTags: '',
88
+ endingHeadTags: '',
89
+ bodyClasses: '',
90
+ bodyAttrs: 'data-server-rendered',
91
+ bodyTags: ''
104
92
  }
93
+ })
105
94
 
106
- parentApp.config.globalProperties.ssrContext = ssrContext
95
+ if (ssrContext._modules === void 0) {
96
+ // not OK. means the SSR build is not using @quasar/ssr-helpers,
97
+ // but we shouldn't crash the app
98
+ ssrContext._modules = []
99
+ }
107
100
 
108
- prepareApp(parentApp, opts, {
109
- parentApp,
110
- $q,
111
- lang: opts.lang,
112
- iconSet: opts.iconSet,
113
- ssrContext
114
- })
101
+ if (ssrContext.onRendered === void 0) {
102
+ // not OK. means the SSR build is not using @quasar/ssr-helpers,
103
+ // but we shouldn't crash the app
104
+ ssrContext.onRendered = () => {}
115
105
  }
106
+
107
+ parentApp.config.globalProperties.ssrContext = ssrContext
108
+
109
+ prepareApp(parentApp, opts, {
110
+ parentApp,
111
+ $q,
112
+ lang: opts.lang,
113
+ iconSet: opts.iconSet,
114
+ ssrContext
115
+ })
116
+ }
116
117
  : function (parentApp, opts = {}) {
117
118
  const $q = { version: __QUASAR_VERSION__ }
118
119
 
package/src/lang.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import defineReactivePlugin from './utils/private/define-reactive-plugin.js'
2
- import defaultLang from '../lang/en-US.js'
2
+ // no extension on purpose for next one:
3
+ import defaultLang from '../lang/en-US'
3
4
 
4
5
  function getLocale () {
5
6
  if (__QUASAR_SSR_SERVER__) { return }
@@ -51,15 +51,15 @@ export default {
51
51
  || client.is.webkit === true || client.is.vivaldi === true
52
52
  )
53
53
  ? hexColor => {
54
- const val = hexColor || getCssVar('primary')
54
+ const val = hexColor || getCssVar('primary')
55
55
 
56
- if (client.is.nativeMobile === true && window.StatusBar) {
57
- window.StatusBar.backgroundColorByHexString(val)
58
- }
59
- else {
60
- setColor(val)
61
- }
56
+ if (client.is.nativeMobile === true && window.StatusBar) {
57
+ window.StatusBar.backgroundColorByHexString(val)
62
58
  }
59
+ else {
60
+ setColor(val)
61
+ }
62
+ }
63
63
  : noop,
64
64
 
65
65
  install ({ $q }) {
@@ -26,7 +26,11 @@ function read (string) {
26
26
  string = decode(string.replace(/\+/g, ' '))
27
27
 
28
28
  try {
29
- string = JSON.parse(string)
29
+ const parsed = JSON.parse(string)
30
+
31
+ if (parsed === Object(parsed) || Array.isArray(parsed) === true) {
32
+ string = parsed
33
+ }
30
34
  }
31
35
  catch (e) {}
32
36
 
@@ -307,8 +307,9 @@
307
307
  },
308
308
 
309
309
  "component": {
310
- "type": "Component",
311
- "desc": "Use custom dialog component; use along with 'componentProps' prop where possible"
310
+ "type": [ "Component", "String" ],
311
+ "desc": "Use custom dialog component; use along with 'componentProps' prop where possible",
312
+ "examples": [ "CustomComponent", "'custom-component'" ]
312
313
  },
313
314
 
314
315
  "componentProps": {
@@ -5,6 +5,7 @@ import QSpinner from '../components/spinner/QSpinner.js'
5
5
  import defineReactivePlugin from '../utils/private/define-reactive-plugin.js'
6
6
  import { createGlobalNode, removeGlobalNode } from '../utils/private/global-nodes.js'
7
7
  import preventScroll from '../utils/prevent-scroll.js'
8
+ import { isObject } from '../utils/private/is.js'
8
9
 
9
10
  let
10
11
  app,
@@ -34,7 +35,7 @@ const Plugin = defineReactivePlugin({
34
35
  show (opts) {
35
36
  if (__QUASAR_SSR_SERVER__) { return }
36
37
 
37
- props = opts === Object(opts) && opts.ignoreDefaults === true
38
+ props = isObject(opts) === true && opts.ignoreDefaults === true
38
39
  ? { ...originalDefaults, ...opts }
39
40
  : { ...defaults, ...opts }
40
41
 
@@ -135,7 +136,7 @@ const Plugin = defineReactivePlugin({
135
136
 
136
137
  setDefaults (opts) {
137
138
  if (__QUASAR_SSR_SERVER__ !== true) {
138
- opts === Object(opts) && Object.assign(defaults, opts)
139
+ isObject(opts) === true && Object.assign(defaults, opts)
139
140
  }
140
141
  },
141
142
 
@@ -6,6 +6,7 @@ import { createGlobalNode } from '../utils/private/global-nodes.js'
6
6
  import { createChildApp } from '../install-quasar.js'
7
7
 
8
8
  import QAjaxBar from '../components/ajax-bar/QAjaxBar.js'
9
+ import { isObject } from '../utils/private/is.js'
9
10
 
10
11
  const barRef = ref(null)
11
12
 
@@ -35,6 +36,14 @@ const Plugin = defineReactivePlugin({
35
36
  : {}
36
37
  )
37
38
 
39
+ function onStart () {
40
+ Plugin.isActive = true
41
+ }
42
+
43
+ function onStop () {
44
+ Plugin.isActive = false
45
+ }
46
+
38
47
  const el = createGlobalNode('q-loading-bar')
39
48
 
40
49
  createChildApp({
@@ -43,23 +52,21 @@ const Plugin = defineReactivePlugin({
43
52
  // hide App from Vue devtools
44
53
  devtools: { hide: true },
45
54
 
46
- setup: () => () => h(QAjaxBar, { ...props.value, ref: barRef })
55
+ setup: () => () => h(QAjaxBar, { ...props.value, onStart, onStop, ref: barRef })
47
56
  }, parentApp).mount(el)
48
57
 
49
58
  Object.assign(this, {
50
59
  start (speed) {
51
60
  barRef.value.start(speed)
52
- Plugin.isActive = true
53
61
  },
54
62
  stop () {
55
- const sessions = barRef.value.stop()
56
- Plugin.isActive = sessions > 0
63
+ barRef.value.stop()
57
64
  },
58
65
  increment () {
59
66
  barRef.value.increment.apply(null, arguments)
60
67
  },
61
68
  setDefaults (opts) {
62
- if (opts === Object(opts)) {
69
+ if (isObject(opts) === true) {
63
70
  Object.assign(props.value, opts)
64
71
  }
65
72
  }
@@ -9,6 +9,7 @@ import { createComponent } from '../utils/private/create.js'
9
9
  import { noop } from '../utils/event.js'
10
10
  import { createGlobalNode } from '../utils/private/global-nodes.js'
11
11
  import { createChildApp } from '../install-quasar.js'
12
+ import { isObject } from '../utils/private/is.js'
12
13
 
13
14
  let uid = 0
14
15
 
@@ -72,7 +73,7 @@ function addNotification (config, $q, originalApi) {
72
73
  Object.assign(notif, defaults)
73
74
  }
74
75
 
75
- if (Object(config) !== config) {
76
+ if (isObject(config) === false) {
76
77
  if (notif.type) {
77
78
  Object.assign(notif, notifTypes[ notif.type ])
78
79
  }
@@ -396,7 +397,11 @@ function getComponent () {
396
397
  if (meta.hasMedia === true) {
397
398
  if (notif.spinner !== false) {
398
399
  mainChild.push(
399
- h(notif.spinner, { class: 'q-notification__spinner q-notification__spinner--' + meta.leftClass })
400
+ h(notif.spinner, {
401
+ class: 'q-notification__spinner q-notification__spinner--' + meta.leftClass,
402
+ color: notif.spinnerColor,
403
+ size: notif.spinnerSize
404
+ })
400
405
  )
401
406
  }
402
407
  else if (notif.icon) {
@@ -404,6 +409,8 @@ function getComponent () {
404
409
  h(QIcon, {
405
410
  class: 'q-notification__icon q-notification__icon--' + meta.leftClass,
406
411
  name: notif.icon,
412
+ color: notif.iconColor,
413
+ size: notif.iconSize,
407
414
  role: 'img'
408
415
  })
409
416
  )
@@ -484,12 +491,12 @@ function getComponent () {
484
491
  export default {
485
492
  setDefaults (opts) {
486
493
  if (__QUASAR_SSR_SERVER__ !== true) {
487
- opts === Object(opts) && Object.assign(defaults, opts)
494
+ isObject(opts) === true && Object.assign(defaults, opts)
488
495
  }
489
496
  },
490
497
 
491
498
  registerType (typeName, typeOpts) {
492
- if (__QUASAR_SSR_SERVER__ !== true && typeOpts === Object(typeOpts)) {
499
+ if (__QUASAR_SSR_SERVER__ !== true && isObject(typeOpts) === true) {
493
500
  notifTypes[ typeName ] = typeOpts
494
501
  }
495
502
  },