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
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.5.4
2
+ * Quasar Framework v2.6.1
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -502,9 +502,9 @@
502
502
 
503
503
  const fn = status === true
504
504
  ? el => {
505
- el.__dragPrevented = true;
506
- el.addEventListener('dragstart', prevent, listenOpts.notPassiveCapture);
507
- }
505
+ el.__dragPrevented = true;
506
+ el.addEventListener('dragstart', prevent, listenOpts.notPassiveCapture);
507
+ }
508
508
  : el => {
509
509
  delete el.__dragPrevented;
510
510
  el.removeEventListener('dragstart', prevent, listenOpts.notPassiveCapture);
@@ -1401,6 +1401,146 @@
1401
1401
  globalConfigIsFrozen = true;
1402
1402
  }
1403
1403
 
1404
+ const
1405
+ hasMap = typeof Map === 'function',
1406
+ hasSet = typeof Set === 'function',
1407
+ hasArrayBuffer = typeof ArrayBuffer === 'function';
1408
+
1409
+ function isDeepEqual (a, b) {
1410
+ if (a === b) {
1411
+ return true
1412
+ }
1413
+
1414
+ if (a !== null && b !== null && typeof a === 'object' && typeof b === 'object') {
1415
+ if (a.constructor !== b.constructor) {
1416
+ return false
1417
+ }
1418
+
1419
+ let length, i;
1420
+
1421
+ if (a.constructor === Array) {
1422
+ length = a.length;
1423
+
1424
+ if (length !== b.length) {
1425
+ return false
1426
+ }
1427
+
1428
+ for (i = length; i-- !== 0;) {
1429
+ if (isDeepEqual(a[ i ], b[ i ]) !== true) {
1430
+ return false
1431
+ }
1432
+ }
1433
+
1434
+ return true
1435
+ }
1436
+
1437
+ if (hasMap === true && a.constructor === Map) {
1438
+ if (a.size !== b.size) {
1439
+ return false
1440
+ }
1441
+
1442
+ i = a.entries().next();
1443
+ while (i.done !== true) {
1444
+ if (b.has(i.value[ 0 ]) !== true) {
1445
+ return false
1446
+ }
1447
+ i = i.next();
1448
+ }
1449
+
1450
+ i = a.entries().next();
1451
+ while (i.done !== true) {
1452
+ if (isDeepEqual(i.value[ 1 ], b.get(i.value[ 0 ])) !== true) {
1453
+ return false
1454
+ }
1455
+ i = i.next();
1456
+ }
1457
+
1458
+ return true
1459
+ }
1460
+
1461
+ if (hasSet === true && a.constructor === Set) {
1462
+ if (a.size !== b.size) {
1463
+ return false
1464
+ }
1465
+
1466
+ i = a.entries().next();
1467
+ while (i.done !== true) {
1468
+ if (b.has(i.value[ 0 ]) !== true) {
1469
+ return false
1470
+ }
1471
+ i = i.next();
1472
+ }
1473
+
1474
+ return true
1475
+ }
1476
+
1477
+ if (hasArrayBuffer === true && a.buffer != null && a.buffer.constructor === ArrayBuffer) {
1478
+ length = a.length;
1479
+
1480
+ if (length !== b.length) {
1481
+ return false
1482
+ }
1483
+
1484
+ for (i = length; i-- !== 0;) {
1485
+ if (a[ i ] !== b[ i ]) {
1486
+ return false
1487
+ }
1488
+ }
1489
+
1490
+ return true
1491
+ }
1492
+
1493
+ if (a.constructor === RegExp) {
1494
+ return a.source === b.source && a.flags === b.flags
1495
+ }
1496
+
1497
+ if (a.valueOf !== Object.prototype.valueOf) {
1498
+ return a.valueOf() === b.valueOf()
1499
+ }
1500
+
1501
+ if (a.toString !== Object.prototype.toString) {
1502
+ return a.toString() === b.toString()
1503
+ }
1504
+
1505
+ const keys = Object.keys(a).filter(key => a[ key ] !== void 0);
1506
+ length = keys.length;
1507
+
1508
+ if (length !== Object.keys(b).filter(key => b[ key ] !== void 0).length) {
1509
+ return false
1510
+ }
1511
+
1512
+ for (i = length; i-- !== 0;) {
1513
+ const key = keys[ i ];
1514
+ if (isDeepEqual(a[ key ], b[ key ]) !== true) {
1515
+ return false
1516
+ }
1517
+ }
1518
+
1519
+ return true
1520
+ }
1521
+
1522
+ // true if both NaN, false otherwise
1523
+ return a !== a && b !== b // eslint-disable-line no-self-compare
1524
+ }
1525
+
1526
+ // not perfect, but what we ARE interested is for Arrays not to slip in
1527
+ // as spread operator will mess things up in various areas
1528
+ function isObject (v) {
1529
+ return v !== null && typeof v === 'object' && Array.isArray(v) !== true
1530
+ }
1531
+
1532
+ function isDate (v) {
1533
+ return Object.prototype.toString.call(v) === '[object Date]'
1534
+ }
1535
+
1536
+ function isRegexp (v) {
1537
+ return Object.prototype.toString.call(v) === '[object RegExp]'
1538
+ }
1539
+
1540
+ function isNumber (v) {
1541
+ return typeof v === 'number' && isFinite(v)
1542
+ }
1543
+
1404
1544
  const autoInstalledPlugins = [
1405
1545
  Platform,
1406
1546
  Body,
@@ -1436,13 +1576,13 @@
1436
1576
  installPlugins(pluginOpts, autoInstalledPlugins);
1437
1577
 
1438
1578
  uiOpts.components !== void 0 && Object.values(uiOpts.components).forEach(c => {
1439
- if (Object(c) === c && c.name !== void 0) {
1579
+ if (isObject(c) === true && c.name !== void 0) {
1440
1580
  app.component(c.name, c);
1441
1581
  }
1442
1582
  });
1443
1583
 
1444
1584
  uiOpts.directives !== void 0 && Object.values(uiOpts.directives).forEach(d => {
1445
- if (Object(d) === d && d.name !== void 0) {
1585
+ if (isObject(d) === true && d.name !== void 0) {
1446
1586
  app.directive(d.name, d);
1447
1587
  }
1448
1588
  });
@@ -1463,7 +1603,7 @@
1463
1603
  }
1464
1604
 
1465
1605
  var installQuasar = function (parentApp, opts = {}) {
1466
- const $q = { version: '2.5.4' };
1606
+ const $q = { version: '2.6.1' };
1467
1607
 
1468
1608
  if (globalConfigIsFrozen === false) {
1469
1609
  if (opts.config !== void 0) {
@@ -1926,6 +2066,7 @@
1926
2066
  const svgUseRE = /^svguse:/;
1927
2067
  const ionRE = /^ion-/;
1928
2068
  const faLaRE = /^[lf]a[srlbdk]? /;
2069
+ const fa6RE = /^fa-(brand|regular|solid)/;
1929
2070
 
1930
2071
  var QIcon = createComponent({
1931
2072
  name: 'QIcon',
@@ -1959,7 +2100,7 @@
1959
2100
  let cls;
1960
2101
  let icon = props.name;
1961
2102
 
1962
- if (!icon) {
2103
+ if (icon === 'none' || !icon) {
1963
2104
  return { none: true }
1964
2105
  }
1965
2106
 
@@ -1968,6 +2109,9 @@
1968
2109
  if (res !== void 0) {
1969
2110
  if (res.icon !== void 0) {
1970
2111
  icon = res.icon;
2112
+ if (icon === 'none' || !icon) {
2113
+ return { none: true }
2114
+ }
1971
2115
  }
1972
2116
  else {
1973
2117
  return {
@@ -2016,7 +2160,7 @@
2016
2160
  if (matches !== null) {
2017
2161
  cls = libMap[ matches[ 1 ] ](icon);
2018
2162
  }
2019
- else if (faLaRE.test(icon) === true) {
2163
+ else if (faLaRE.test(icon) === true || fa6RE.test(icon) === true) {
2020
2164
  cls = icon;
2021
2165
  }
2022
2166
  else if (ionRE.test(icon) === true) {
@@ -2647,8 +2791,8 @@
2647
2791
  // avoid comparing the child with its parent
2648
2792
  && currentMatched[ currentMatched.length - 1 ].path !== parentRecordPath
2649
2793
  ? currentMatched.findIndex(
2650
- isSameRouteRecord.bind(null, matched[ length - 2 ])
2651
- )
2794
+ isSameRouteRecord.bind(null, matched[ length - 2 ])
2795
+ )
2652
2796
  : index
2653
2797
  )
2654
2798
  });
@@ -3167,13 +3311,13 @@
3167
3311
 
3168
3312
  return props.padding !== void 0
3169
3313
  ? Object.assign({}, obj, {
3170
- padding: props.padding
3171
- .split(/\s+/)
3172
- .map(v => (v in padding ? padding[ v ] + 'px' : v))
3173
- .join(' '),
3174
- minWidth: '0',
3175
- minHeight: '0'
3176
- })
3314
+ padding: props.padding
3315
+ .split(/\s+/)
3316
+ .map(v => (v in padding ? padding[ v ] + 'px' : v))
3317
+ .join(' '),
3318
+ minWidth: '0',
3319
+ minHeight: '0'
3320
+ })
3177
3321
  : obj
3178
3322
  });
3179
3323
 
@@ -3352,7 +3496,7 @@
3352
3496
  onClick,
3353
3497
  onKeydown,
3354
3498
  onMousedown,
3355
- onTouchstartPassive
3499
+ onTouchstart
3356
3500
  }
3357
3501
  }
3358
3502
 
@@ -3421,12 +3565,12 @@
3421
3565
  // is it already destroyed?
3422
3566
  if (rootRef.value === null) { return }
3423
3567
 
3424
- if (isKeyCode(e, [ 13, 32 ]) === true) {
3425
- stopAndPrevent(e);
3568
+ emit('keydown', e);
3426
3569
 
3427
- if (keyboardTarget !== rootRef.value) {
3428
- keyboardTarget !== null && cleanup();
3570
+ if (isKeyCode(e, [ 13, 32 ]) === true && keyboardTarget !== rootRef.value) {
3571
+ keyboardTarget !== null && cleanup();
3429
3572
 
3573
+ if (e.defaultPrevented !== true) {
3430
3574
  // focus external button if the focus helper was focused before
3431
3575
  rootRef.value.focus();
3432
3576
 
@@ -3435,15 +3579,19 @@
3435
3579
  document.addEventListener('keyup', onPressEnd, true);
3436
3580
  rootRef.value.addEventListener('blur', onPressEnd, passiveCapture);
3437
3581
  }
3438
- }
3439
3582
 
3440
- emit('keydown', e);
3583
+ stopAndPrevent(e);
3584
+ }
3441
3585
  }
3442
3586
 
3443
- function onTouchstartPassive (e) {
3587
+ function onTouchstart (e) {
3444
3588
  // is it already destroyed?
3445
3589
  if (rootRef.value === null) { return }
3446
3590
 
3591
+ emit('touchstart', e);
3592
+
3593
+ if (e.defaultPrevented === true) { return }
3594
+
3447
3595
  if (touchTarget !== rootRef.value) {
3448
3596
  touchTarget !== null && cleanup();
3449
3597
  touchTarget = rootRef.value;
@@ -3460,23 +3608,21 @@
3460
3608
  mouseTimer = setTimeout(() => {
3461
3609
  avoidMouseRipple = false;
3462
3610
  }, 200);
3463
-
3464
- emit('touchstart', e);
3465
3611
  }
3466
3612
 
3467
3613
  function onMousedown (e) {
3468
3614
  // is it already destroyed?
3469
3615
  if (rootRef.value === null) { return }
3470
3616
 
3471
- if (mouseTarget !== rootRef.value) {
3617
+ e.qSkipRipple = avoidMouseRipple === true;
3618
+ emit('mousedown', e);
3619
+
3620
+ if (e.defaultPrevented !== true && mouseTarget !== rootRef.value) {
3472
3621
  mouseTarget !== null && cleanup();
3473
3622
  mouseTarget = rootRef.value;
3474
3623
  rootRef.value.classList.add('q-btn--active');
3475
3624
  document.addEventListener('mouseup', onPressEnd, passiveCapture);
3476
3625
  }
3477
-
3478
- e.qSkipRipple = avoidMouseRipple === true;
3479
- emit('mousedown', e);
3480
3626
  }
3481
3627
 
3482
3628
  function onPressEnd (e) {
@@ -5312,19 +5458,19 @@
5312
5458
  () => (
5313
5459
  showing.value === true
5314
5460
  ? vue.h('div', {
5315
- ...attrs,
5316
- ref: innerRef,
5317
- tabindex: -1,
5318
- class: [
5319
- 'q-menu q-position-engine scroll' + menuClass.value,
5320
- attrs.class
5321
- ],
5322
- style: [
5323
- attrs.style,
5324
- transitionStyle.value
5325
- ],
5326
- ...onEvents.value
5327
- }, hSlot(slots.default))
5461
+ ...attrs,
5462
+ ref: innerRef,
5463
+ tabindex: -1,
5464
+ class: [
5465
+ 'q-menu q-position-engine scroll' + menuClass.value,
5466
+ attrs.class
5467
+ ],
5468
+ style: [
5469
+ attrs.style,
5470
+ transitionStyle.value
5471
+ ],
5472
+ ...onEvents.value
5473
+ }, hSlot(slots.default))
5328
5474
  : null
5329
5475
  )
5330
5476
  )
@@ -6519,136 +6665,6 @@
6519
6665
  }
6520
6666
  }
6521
6667
 
6522
- const
6523
- hasMap = typeof Map === 'function',
6524
- hasSet = typeof Set === 'function',
6525
- hasArrayBuffer = typeof ArrayBuffer === 'function';
6526
-
6527
- function isDeepEqual (a, b) {
6528
- if (a === b) {
6529
- return true
6530
- }
6531
-
6532
- if (a !== null && b !== null && typeof a === 'object' && typeof b === 'object') {
6533
- if (a.constructor !== b.constructor) {
6534
- return false
6535
- }
6536
-
6537
- let length, i;
6538
-
6539
- if (a.constructor === Array) {
6540
- length = a.length;
6541
-
6542
- if (length !== b.length) {
6543
- return false
6544
- }
6545
-
6546
- for (i = length; i-- !== 0;) {
6547
- if (isDeepEqual(a[ i ], b[ i ]) !== true) {
6548
- return false
6549
- }
6550
- }
6551
-
6552
- return true
6553
- }
6554
-
6555
- if (hasMap === true && a.constructor === Map) {
6556
- if (a.size !== b.size) {
6557
- return false
6558
- }
6559
-
6560
- i = a.entries().next();
6561
- while (i.done !== true) {
6562
- if (b.has(i.value[ 0 ]) !== true) {
6563
- return false
6564
- }
6565
- i = i.next();
6566
- }
6567
-
6568
- i = a.entries().next();
6569
- while (i.done !== true) {
6570
- if (isDeepEqual(i.value[ 1 ], b.get(i.value[ 0 ])) !== true) {
6571
- return false
6572
- }
6573
- i = i.next();
6574
- }
6575
-
6576
- return true
6577
- }
6578
-
6579
- if (hasSet === true && a.constructor === Set) {
6580
- if (a.size !== b.size) {
6581
- return false
6582
- }
6583
-
6584
- i = a.entries().next();
6585
- while (i.done !== true) {
6586
- if (b.has(i.value[ 0 ]) !== true) {
6587
- return false
6588
- }
6589
- i = i.next();
6590
- }
6591
-
6592
- return true
6593
- }
6594
-
6595
- if (hasArrayBuffer === true && a.buffer != null && a.buffer.constructor === ArrayBuffer) {
6596
- length = a.length;
6597
-
6598
- if (length !== b.length) {
6599
- return false
6600
- }
6601
-
6602
- for (i = length; i-- !== 0;) {
6603
- if (a[ i ] !== b[ i ]) {
6604
- return false
6605
- }
6606
- }
6607
-
6608
- return true
6609
- }
6610
-
6611
- if (a.constructor === RegExp) {
6612
- return a.source === b.source && a.flags === b.flags
6613
- }
6614
-
6615
- if (a.valueOf !== Object.prototype.valueOf) {
6616
- return a.valueOf() === b.valueOf()
6617
- }
6618
-
6619
- if (a.toString !== Object.prototype.toString) {
6620
- return a.toString() === b.toString()
6621
- }
6622
-
6623
- const keys = Object.keys(a).filter(key => a[ key ] !== void 0);
6624
- length = keys.length;
6625
-
6626
- if (length !== Object.keys(b).filter(key => b[ key ] !== void 0).length) {
6627
- return false
6628
- }
6629
-
6630
- for (i = length; i-- !== 0;) {
6631
- const key = keys[ i ];
6632
- if (isDeepEqual(a[ key ], b[ key ]) !== true) {
6633
- return false
6634
- }
6635
- }
6636
-
6637
- return true
6638
- }
6639
-
6640
- // true if both NaN, false otherwise
6641
- return a !== a && b !== b // eslint-disable-line no-self-compare
6642
- }
6643
-
6644
- function isDate (v) {
6645
- return Object.prototype.toString.call(v) === '[object Date]'
6646
- }
6647
-
6648
- function isNumber (v) {
6649
- return typeof v === 'number' && isFinite(v)
6650
- }
6651
-
6652
6668
  const navigationPositionOptions = [ 'top', 'right', 'bottom', 'left' ];
6653
6669
  const controlTypeOptions = [ 'regular', 'flat', 'outline', 'push', 'unelevated' ];
6654
6670
 
@@ -8564,7 +8580,7 @@
8564
8580
  if (typeof def === 'function') {
8565
8581
  return markerTicks.value.map(value => {
8566
8582
  const item = def(value);
8567
- return Object(item) === item ? { ...item, value } : { value, label: item }
8583
+ return isObject(item) === true ? { ...item, value } : { value, label: item }
8568
8584
  })
8569
8585
  }
8570
8586
 
@@ -8572,14 +8588,14 @@
8572
8588
 
8573
8589
  if (Array.isArray(def) === true) {
8574
8590
  return def
8575
- .map(item => (Object(item) === item ? item : { value: item }))
8591
+ .map(item => (isObject(item) === true ? item : { value: item }))
8576
8592
  .filter(filterFn)
8577
8593
  }
8578
8594
 
8579
8595
  return Object.keys(def).map(key => {
8580
8596
  const item = def[ key ];
8581
8597
  const value = Number(key);
8582
- return Object(item) === item ? { ...item, value } : { value, label: item }
8598
+ return isObject(item) === true ? { ...item, value } : { value, label: item }
8583
8599
  }).filter(filterFn)
8584
8600
  }
8585
8601
 
@@ -9611,11 +9627,11 @@
9611
9627
  let wasItActive = wasActive === true
9612
9628
  ? emptyFn
9613
9629
  : tab => {
9614
- if (model === tab.name.value) {
9615
- wasActive = true;
9616
- wasItActive = emptyFn;
9617
- }
9618
- };
9630
+ if (model === tab.name.value) {
9631
+ wasActive = true;
9632
+ wasItActive = emptyFn;
9633
+ }
9634
+ };
9619
9635
 
9620
9636
  const tabList = getRouteList();
9621
9637
 
@@ -11578,7 +11594,9 @@
11578
11594
  });
11579
11595
 
11580
11596
  function getLocale () {
11581
- return props.locale || $q.lang.date
11597
+ return props.locale !== void 0
11598
+ ? { ...$q.lang.date, ...props.locale }
11599
+ : $q.lang.date
11582
11600
  }
11583
11601
 
11584
11602
  function getCurrentDate (dateOnly) {
@@ -12770,7 +12788,7 @@
12770
12788
  const rangeModel = vue.computed(() => {
12771
12789
  const fn = date => decodeString(date, innerMask.value, innerLocale.value);
12772
12790
  return normalizedModel.value
12773
- .filter(date => Object(date) === date && date.from !== void 0 && date.to !== void 0)
12791
+ .filter(date => isObject(date) === true && date.from !== void 0 && date.to !== void 0)
12774
12792
  .map(range => ({ from: fn(range.from), to: fn(range.to) }))
12775
12793
  .filter(range => range.from.dateHash !== null && range.to.dateHash !== null && range.from.dateHash < range.to.dateHash)
12776
12794
  });
@@ -13823,24 +13841,24 @@
13823
13841
  }, days.value.map(day => vue.h('div', { class: day.classes }, [
13824
13842
  day.in === true
13825
13843
  ? vue.h(
13826
- QBtn, {
13827
- class: day.today === true ? 'q-date__today' : '',
13828
- dense: true,
13829
- flat: day.flat,
13830
- unelevated: day.unelevated,
13831
- color: day.color,
13832
- textColor: day.textColor,
13833
- label: day.i,
13834
- tabindex: tabindex.value,
13835
- ...getCache('day#' + day.i, {
13836
- onClick: () => { onDayClick(day.i); },
13837
- onMouseover: () => { onDayMouseover(day.i); }
13838
- })
13839
- },
13840
- day.event !== false
13841
- ? () => vue.h('div', { class: 'q-date__event bg-' + day.event })
13842
- : null
13843
- )
13844
+ QBtn, {
13845
+ class: day.today === true ? 'q-date__today' : '',
13846
+ dense: true,
13847
+ flat: day.flat,
13848
+ unelevated: day.unelevated,
13849
+ color: day.color,
13850
+ textColor: day.textColor,
13851
+ label: day.i,
13852
+ tabindex: tabindex.value,
13853
+ ...getCache('day#' + day.i, {
13854
+ onClick: () => { onDayClick(day.i); },
13855
+ onMouseover: () => { onDayMouseover(day.i); }
13856
+ })
13857
+ },
13858
+ day.event !== false
13859
+ ? () => vue.h('div', { class: 'q-date__event bg-' + day.event })
13860
+ : null
13861
+ )
13844
13862
  : vue.h('div', '' + day.i)
13845
13863
  ]))))
13846
13864
  ])
@@ -14670,11 +14688,11 @@
14670
14688
  }, () => (
14671
14689
  useBackdrop.value === true
14672
14690
  ? vue.h('div', {
14673
- class: 'q-dialog__backdrop fixed-full',
14674
- style: transitionStyle.value,
14675
- 'aria-hidden': 'true',
14676
- onMousedown: onBackdropClick
14677
- })
14691
+ class: 'q-dialog__backdrop fixed-full',
14692
+ style: transitionStyle.value,
14693
+ 'aria-hidden': 'true',
14694
+ onMousedown: onBackdropClick
14695
+ })
14678
14696
  : null
14679
14697
  )),
14680
14698
 
@@ -14684,12 +14702,12 @@
14684
14702
  () => (
14685
14703
  showing.value === true
14686
14704
  ? vue.h('div', {
14687
- ref: innerRef,
14688
- class: classes.value,
14689
- style: transitionStyle.value,
14690
- tabindex: -1,
14691
- ...onEvents.value
14692
- }, hSlot(slots.default))
14705
+ ref: innerRef,
14706
+ class: classes.value,
14707
+ style: transitionStyle.value,
14708
+ tabindex: -1,
14709
+ ...onEvents.value
14710
+ }, hSlot(slots.default))
14693
14711
  : null
14694
14712
  )
14695
14713
  )
@@ -16010,18 +16028,18 @@
16010
16028
  function getTooltipContent () {
16011
16029
  return showing.value === true
16012
16030
  ? vue.h('div', {
16013
- ...attrs,
16014
- ref: innerRef,
16015
- class: [
16016
- 'q-tooltip q-tooltip--style q-position-engine no-pointer-events',
16017
- attrs.class
16018
- ],
16019
- style: [
16020
- attrs.style,
16021
- transitionStyle.value
16022
- ],
16023
- role: 'complementary'
16024
- }, hSlot(slots.default))
16031
+ ...attrs,
16032
+ ref: innerRef,
16033
+ class: [
16034
+ 'q-tooltip q-tooltip--style q-position-engine no-pointer-events',
16035
+ attrs.class
16036
+ ],
16037
+ style: [
16038
+ attrs.style,
16039
+ transitionStyle.value
16040
+ ],
16041
+ role: 'complementary'
16042
+ }, hSlot(slots.default))
16025
16043
  : null
16026
16044
  }
16027
16045
 
@@ -16236,8 +16254,8 @@
16236
16254
  if (btn.tip && eVm.$q.platform.is.desktop) {
16237
16255
  const Key = btn.key
16238
16256
  ? vue.h('div', [
16239
- vue.h('small', `(CTRL + ${ String.fromCharCode(btn.key) })`)
16240
- ])
16257
+ vue.h('small', `(CTRL + ${ String.fromCharCode(btn.key) })`)
16258
+ ])
16241
16259
  : null;
16242
16260
  child.push(
16243
16261
  vue.h(QTooltip, { delay: 1000 }, () => [
@@ -16523,36 +16541,6 @@
16523
16541
  return acc
16524
16542
  }
16525
16543
 
16526
- const
16527
- toString = Object.prototype.toString,
16528
- hasOwn = Object.prototype.hasOwnProperty,
16529
- class2type = {};
16530
-
16531
- 'Boolean Number String Function Array Date RegExp Object'.split(' ').forEach(name => {
16532
- class2type[ '[object ' + name + ']' ] = name.toLowerCase();
16533
- });
16534
-
16535
- function type (obj) {
16536
- return obj === null ? String(obj) : class2type[ toString.call(obj) ] || 'object'
16537
- }
16538
-
16539
- function isPlainObject (obj) {
16540
- if (!obj || type(obj) !== 'object') {
16541
- return false
16542
- }
16543
-
16544
- if (obj.constructor
16545
- && !hasOwn.call(obj, 'constructor')
16546
- && !hasOwn.call(obj.constructor.prototype, 'isPrototypeOf')) {
16547
- return false
16548
- }
16549
-
16550
- let key;
16551
- for (key in obj) {} // eslint-disable-line
16552
-
16553
- return key === undefined || hasOwn.call(obj, key)
16554
- }
16555
-
16556
16544
  function extend () {
16557
16545
  let
16558
16546
  options, name, src, copy, copyIsArray, clone,
@@ -16567,7 +16555,7 @@
16567
16555
  i = 2;
16568
16556
  }
16569
16557
 
16570
- if (Object(target) !== target && type(target) !== 'function') {
16558
+ if (Object(target) !== target && typeof target !== 'function') {
16571
16559
  target = {};
16572
16560
  }
16573
16561
 
@@ -16586,18 +16574,18 @@
16586
16574
  continue
16587
16575
  }
16588
16576
 
16589
- if (deep && copy && (isPlainObject(copy) || (copyIsArray = type(copy) === 'array'))) {
16577
+ if (deep && copy && (isObject(copy) === true || (copyIsArray = Array.isArray(copy) === true))) {
16590
16578
  if (copyIsArray) {
16591
16579
  copyIsArray = false;
16592
- clone = src && type(src) === 'array' ? src : [];
16580
+ clone = src && Array.isArray(src) === true ? src : [];
16593
16581
  }
16594
16582
  else {
16595
- clone = src && isPlainObject(src) ? src : {};
16583
+ clone = src && isObject(src) === true ? src : {};
16596
16584
  }
16597
16585
 
16598
16586
  target[ name ] = extend(deep, clone, copy);
16599
16587
  }
16600
- else if (copy !== undefined) {
16588
+ else if (copy !== void 0) {
16601
16589
  target[ name ] = copy;
16602
16590
  }
16603
16591
  }
@@ -16774,17 +16762,17 @@
16774
16762
  const userDef = props.definitions || {};
16775
16763
  const def = props.definitions || props.fonts
16776
16764
  ? extend(
16777
- true,
16778
- {},
16779
- buttonDef.value,
16780
- userDef,
16781
- getFonts(
16782
- defaultFont,
16783
- $q.lang.editor.defaultFont,
16784
- $q.iconSet.editor.font,
16785
- props.fonts
16786
- )
16765
+ true,
16766
+ {},
16767
+ buttonDef.value,
16768
+ userDef,
16769
+ getFonts(
16770
+ defaultFont,
16771
+ $q.lang.editor.defaultFont,
16772
+ $q.iconSet.editor.font,
16773
+ props.fonts
16787
16774
  )
16775
+ )
16788
16776
  : buttonDef.value;
16789
16777
 
16790
16778
  return props.toolbar.map(
@@ -17233,8 +17221,8 @@
17233
17221
 
17234
17222
  timer = setTimeout(() => {
17235
17223
  el.style.height = `${ el.scrollHeight }px`;
17236
- animListener = ev => {
17237
- if (Object(ev) !== ev || ev.target === el) {
17224
+ animListener = evt => {
17225
+ if (Object(evt) !== evt || evt.target === el) {
17238
17226
  end(el, 'show');
17239
17227
  }
17240
17228
  };
@@ -17259,8 +17247,8 @@
17259
17247
 
17260
17248
  timer = setTimeout(() => {
17261
17249
  el.style.height = 0;
17262
- animListener = ev => {
17263
- if (Object(ev) !== ev || ev.target === el) {
17250
+ animListener = evt => {
17251
+ if (Object(evt) !== evt || evt.target === el) {
17264
17252
  end(el, 'hide');
17265
17253
  }
17266
17254
  };
@@ -18457,18 +18445,20 @@
18457
18445
  }) {
18458
18446
  const { props, emit, proxy } = vue.getCurrentInstance();
18459
18447
 
18448
+ const dndRef = vue.ref(null);
18449
+
18460
18450
  const extensions = vue.computed(() => (
18461
18451
  props.accept !== void 0
18462
18452
  ? props.accept.split(',').map(ext => {
18463
- ext = ext.trim();
18464
- if (ext === '*') { // support "*"
18465
- return '*/'
18466
- }
18467
- else if (ext.endsWith('/*')) { // support "image/*" or "*/*"
18468
- ext = ext.slice(0, ext.length - 1);
18469
- }
18470
- return ext.toUpperCase()
18471
- })
18453
+ ext = ext.trim();
18454
+ if (ext === '*') { // support "*"
18455
+ return '*/'
18456
+ }
18457
+ else if (ext.endsWith('/*')) { // support "image/*" or "*/*"
18458
+ ext = ext.slice(0, ext.length - 1);
18459
+ }
18460
+ return ext.toUpperCase()
18461
+ })
18472
18462
  : null
18473
18463
  ));
18474
18464
 
@@ -18533,7 +18523,7 @@
18533
18523
  // Cordova/iOS allows selecting multiple files even when the
18534
18524
  // multiple attribute is not specified. We also normalize drag'n'dropped
18535
18525
  // files here:
18536
- if (props.multiple !== true) {
18526
+ if (props.multiple !== true && files.length > 0) {
18537
18527
  files = [ files[ 0 ] ];
18538
18528
  }
18539
18529
 
@@ -18598,7 +18588,7 @@
18598
18588
 
18599
18589
  function onDragleave (e) {
18600
18590
  stopAndPrevent(e);
18601
- dnd.value = false;
18591
+ e.relatedTarget !== dndRef.value && (dnd.value = false);
18602
18592
  }
18603
18593
 
18604
18594
  function onDrop (e) {
@@ -18615,6 +18605,7 @@
18615
18605
  function getDndNode (type) {
18616
18606
  if (dnd.value === true) {
18617
18607
  return vue.h('div', {
18608
+ ref: dndRef,
18618
18609
  class: `q-${ type }__dnd absolute-full`,
18619
18610
  onDragenter: stopAndPreventDrag,
18620
18611
  onDragover: stopAndPreventDrag,
@@ -18734,6 +18725,7 @@
18734
18725
  pickFiles,
18735
18726
  addFiles,
18736
18727
  onDragover,
18728
+ onDragleave,
18737
18729
  processFiles,
18738
18730
  getDndNode,
18739
18731
  maxFilesNumber,
@@ -19013,10 +19005,10 @@
19013
19005
  }, [
19014
19006
  file.__status === 'failed'
19015
19007
  ? vue.h(QIcon, {
19016
- class: 'q-uploader__file-status',
19017
- name: $q.iconSet.type.negative,
19018
- color: 'negative'
19019
- })
19008
+ class: 'q-uploader__file-status',
19009
+ name: $q.iconSet.type.negative,
19010
+ color: 'negative'
19011
+ })
19020
19012
  : null,
19021
19013
 
19022
19014
  vue.h('div', { class: 'q-uploader__file-header-content col' }, [
@@ -19030,11 +19022,11 @@
19030
19022
 
19031
19023
  file.__status === 'uploading'
19032
19024
  ? vue.h(QCircularProgress, {
19033
- value: file.__progress,
19034
- min: 0,
19035
- max: 1,
19036
- indeterminate: file.__progress === 0
19037
- })
19025
+ value: file.__progress,
19026
+ min: 0,
19027
+ max: 1,
19028
+ indeterminate: file.__progress === 0
19029
+ })
19038
19030
  : vue.h(QBtn, {
19039
19031
  round: true,
19040
19032
  dense: true,
@@ -19103,7 +19095,7 @@
19103
19095
  const data = { ref: rootRef, class: classes.value };
19104
19096
 
19105
19097
  if (canAddFiles.value === true) {
19106
- data.onDragover = onDragover;
19098
+ Object.assign(data, { onDragover, onDragleave });
19107
19099
  }
19108
19100
 
19109
19101
  return vue.h('div', data, children)
@@ -19132,7 +19124,7 @@
19132
19124
  ...props
19133
19125
  },
19134
19126
 
19135
- emits: Object(emits) === emits
19127
+ emits: isObject(emits) === true
19136
19128
  ? { ...coreEmitsObject, ...emits }
19137
19129
  : [ ...coreEmits, ...emits ],
19138
19130
 
@@ -19686,7 +19678,7 @@
19686
19678
  if (typeof options.style === 'string') {
19687
19679
  elTo.style.cssText += ' ' + options.style;
19688
19680
  }
19689
- else if (options.style === Object(options.style)) {
19681
+ else if (isObject(options.style) === true) {
19690
19682
  for (const prop in options.style) {
19691
19683
  elTo.style[ prop ] = options.style[ prop ];
19692
19684
  }
@@ -20123,8 +20115,8 @@
20123
20115
  elToClone.style.animation = `${ options.duration }ms ${ options.easing } ${ options.delay }ms ${ animationDirection } ${ options.fill } ${ qAnimId }-to`;
20124
20116
  elTo.style.animation = `${ options.duration }ms ${ options.easing } ${ options.delay }ms ${ animationDirection } ${ options.fill } ${ qAnimId }`;
20125
20117
 
20126
- const cleanup = ev => {
20127
- if (ev === Object(ev) && ev.animationName !== qAnimId) {
20118
+ const cleanup = evt => {
20119
+ if (evt === Object(evt) && evt.animationName !== qAnimId) {
20128
20120
  return
20129
20121
  }
20130
20122
 
@@ -20187,24 +20179,24 @@
20187
20179
  : (
20188
20180
  options.waitFor === 'transitionend'
20189
20181
  ? new Promise(resolve => {
20190
- const timer = setTimeout(() => {
20191
- endFn();
20192
- }, 400);
20182
+ const timer = setTimeout(() => {
20183
+ endFn();
20184
+ }, 400);
20193
20185
 
20194
- const endFn = ev => {
20195
- clearTimeout(timer);
20186
+ const endFn = ev => {
20187
+ clearTimeout(timer);
20196
20188
 
20197
- if (elTo) {
20198
- elTo.removeEventListener('transitionend', endFn);
20199
- elTo.removeEventListener('transitioncancel', endFn);
20200
- }
20189
+ if (elTo) {
20190
+ elTo.removeEventListener('transitionend', endFn);
20191
+ elTo.removeEventListener('transitioncancel', endFn);
20192
+ }
20201
20193
 
20202
- resolve();
20203
- };
20194
+ resolve();
20195
+ };
20204
20196
 
20205
- elTo.addEventListener('transitionend', endFn);
20206
- elTo.addEventListener('transitioncancel', endFn);
20207
- })
20197
+ elTo.addEventListener('transitionend', endFn);
20198
+ elTo.addEventListener('transitioncancel', endFn);
20199
+ })
20208
20200
  : options.waitFor
20209
20201
  );
20210
20202
 
@@ -20881,14 +20873,6 @@
20881
20873
  }, getControlContainer())
20882
20874
  );
20883
20875
 
20884
- slots.append !== void 0 && node.push(
20885
- vue.h('div', {
20886
- class: 'q-field__append q-field__marginal row no-wrap items-center',
20887
- key: 'append',
20888
- onClick: prevent
20889
- }, slots.append())
20890
- );
20891
-
20892
20876
  hasError.value === true && props.noErrorIcon === false && node.push(
20893
20877
  getInnerAppendNode('error', [
20894
20878
  vue.h(QIcon, { name: $q.iconSet.field.error, color: 'negative' })
@@ -20922,6 +20906,14 @@
20922
20906
  );
20923
20907
  }
20924
20908
 
20909
+ slots.append !== void 0 && node.push(
20910
+ vue.h('div', {
20911
+ class: 'q-field__append q-field__marginal row no-wrap items-center',
20912
+ key: 'append',
20913
+ onClick: prevent
20914
+ }, slots.append())
20915
+ );
20916
+
20925
20917
  state.getInnerAppend !== void 0 && node.push(
20926
20918
  getInnerAppendNode('inner-append', state.getInnerAppend())
20927
20919
  );
@@ -21026,8 +21018,8 @@
21026
21018
 
21027
21019
  hasCounter === true
21028
21020
  ? vue.h('div', {
21029
- class: 'q-field__counter'
21030
- }, slots.counter !== void 0 ? slots.counter() : state.computedCounter.value)
21021
+ class: 'q-field__counter'
21022
+ }, slots.counter !== void 0 ? slots.counter() : state.computedCounter.value)
21031
21023
  : null
21032
21024
  ])
21033
21025
  }
@@ -21067,6 +21059,14 @@
21067
21059
  });
21068
21060
 
21069
21061
  return function renderField () {
21062
+ const labelAttrs = state.getControl === void 0 && slots.control === void 0
21063
+ ? {
21064
+ ...state.splitAttrs.attributes.value,
21065
+ 'data-autofocus': props.autofocus,
21066
+ ...attributes.value
21067
+ }
21068
+ : attributes.value;
21069
+
21070
21070
  return vue.h('label', {
21071
21071
  ref: state.rootRef,
21072
21072
  class: [
@@ -21074,13 +21074,13 @@
21074
21074
  attrs.class
21075
21075
  ],
21076
21076
  style: attrs.style,
21077
- ...attributes.value
21077
+ ...labelAttrs
21078
21078
  }, [
21079
21079
  slots.before !== void 0
21080
21080
  ? vue.h('div', {
21081
- class: 'q-field__before q-field__marginal row no-wrap items-center',
21082
- onClick: prevent
21083
- }, slots.before())
21081
+ class: 'q-field__before q-field__marginal row no-wrap items-center',
21082
+ onClick: prevent
21083
+ }, slots.before())
21084
21084
  : null,
21085
21085
 
21086
21086
  vue.h('div', {
@@ -21100,9 +21100,9 @@
21100
21100
 
21101
21101
  slots.after !== void 0
21102
21102
  ? vue.h('div', {
21103
- class: 'q-field__after q-field__marginal row no-wrap items-center',
21104
- onClick: prevent
21105
- }, slots.after())
21103
+ class: 'q-field__after q-field__marginal row no-wrap items-center',
21104
+ onClick: prevent
21105
+ }, slots.after())
21106
21106
  : null
21107
21107
  ])
21108
21108
  }
@@ -21156,12 +21156,12 @@
21156
21156
 
21157
21157
  return typeGuard === true
21158
21158
  ? vue.computed(() => {
21159
- if (props.type !== 'file') {
21160
- return
21161
- }
21159
+ if (props.type !== 'file') {
21160
+ return
21161
+ }
21162
21162
 
21163
- return getFormDomProps()
21164
- })
21163
+ return getFormDomProps()
21164
+ })
21165
21165
  : vue.computed(getFormDomProps)
21166
21166
  }
21167
21167
 
@@ -21210,6 +21210,7 @@
21210
21210
  const {
21211
21211
  pickFiles,
21212
21212
  onDragover,
21213
+ onDragleave,
21213
21214
  processFiles,
21214
21215
  getDndNode
21215
21216
  } = useFile({ editable: state.editable, dnd, getFileInput, addFilesToQueue });
@@ -21415,7 +21416,7 @@
21415
21416
  };
21416
21417
 
21417
21418
  if (state.editable.value === true) {
21418
- Object.assign(data, { onDragover, onKeydown, onKeyup });
21419
+ Object.assign(data, { onDragover, onDragleave, onKeydown, onKeyup });
21419
21420
  }
21420
21421
 
21421
21422
  return vue.h('div', data, [ getInput() ].concat(getSelection()))
@@ -22428,7 +22429,9 @@
22428
22429
  isWorking.value = false;
22429
22430
  isFetching.value = false;
22430
22431
  localScrollTarget.removeEventListener('scroll', poll, passive$3);
22431
- poll !== void 0 && poll.cancel();
22432
+ if (poll !== void 0 && poll.cancel !== void 0) {
22433
+ poll.cancel();
22434
+ }
22432
22435
  }
22433
22436
  }
22434
22437
 
@@ -22573,7 +22576,7 @@
22573
22576
 
22574
22577
  const labelClass = vue.computed(() =>
22575
22578
  'q-inner-loading__label'
22576
- + (props.labelClass !== void 0 ? ` ${ props.labelClass}` : '')
22579
+ + (props.labelClass !== void 0 ? ` ${ props.labelClass }` : '')
22577
22580
  );
22578
22581
 
22579
22582
  function getInner () {
@@ -22599,12 +22602,12 @@
22599
22602
  function getContent () {
22600
22603
  return props.showing === true
22601
22604
  ? vue.h(
22602
- 'div',
22603
- { class: classes.value, style: transitionStyle.value },
22604
- slots.default !== void 0
22605
- ? slots.default()
22606
- : getInner()
22607
- )
22605
+ 'div',
22606
+ { class: classes.value, style: transitionStyle.value },
22607
+ slots.default !== void 0
22608
+ ? slots.default()
22609
+ : getInner()
22610
+ )
22608
22611
  : null
22609
22612
  }
22610
22613
 
@@ -23310,7 +23313,10 @@
23310
23313
  if (hasMask.value === true) {
23311
23314
  if (stopValueWatcher === true) {
23312
23315
  stopValueWatcher = false;
23313
- return
23316
+
23317
+ if (String(v) === emitCachedValue) {
23318
+ return
23319
+ }
23314
23320
  }
23315
23321
 
23316
23322
  updateMaskValue(v);
@@ -23981,11 +23987,14 @@
23981
23987
  angle = centerPosition.left < pos.left ? angle + 90 : 270 - angle;
23982
23988
  }
23983
23989
 
23984
- if (props.angle) {
23990
+ if ($q.lang.rtl === true) {
23991
+ angle = normalizeToInterval(-angle - props.angle, 0, 360);
23992
+ }
23993
+ else if (props.angle) {
23985
23994
  angle = normalizeToInterval(angle - props.angle, 0, 360);
23986
23995
  }
23987
23996
 
23988
- if ($q.lang.rtl === true) {
23997
+ if (props.reverse === true) {
23989
23998
  angle = 360 - angle;
23990
23999
  }
23991
24000
 
@@ -25171,10 +25180,10 @@
25171
25180
  function getContent () {
25172
25181
  return showing.value === true
25173
25182
  ? vue.h('div', {
25174
- ref: rootRef,
25175
- class: 'q-page-scroller',
25176
- onClick
25177
- }, getStickyContent(slots))
25183
+ ref: rootRef,
25184
+ class: 'q-page-scroller',
25185
+ onClick
25186
+ }, getStickyContent(slots))
25178
25187
  : null
25179
25188
  }
25180
25189
 
@@ -26183,7 +26192,7 @@
26183
26192
  }
26184
26193
 
26185
26194
  if (event.isFirst === true) {
26186
- if (getVerticalScrollPosition(localScrollTarget) !== 0 || event.direction !== "down") {
26195
+ if (getVerticalScrollPosition(localScrollTarget) !== 0 || event.direction !== 'down') {
26187
26196
  if (pulling.value === true) {
26188
26197
  pulling.value = false;
26189
26198
  state.value = 'pull';
@@ -26296,10 +26305,10 @@
26296
26305
  }, [
26297
26306
  state.value !== 'refreshing'
26298
26307
  ? vue.h(QIcon, {
26299
- name: props.icon || $q.iconSet.pullToRefresh.icon,
26300
- color: props.color,
26301
- size: '32px'
26302
- })
26308
+ name: props.icon || $q.iconSet.pullToRefresh.icon,
26309
+ color: props.color,
26310
+ size: '32px'
26311
+ })
26303
26312
  : vue.h(QSpinner, {
26304
26313
  size: '24px',
26305
26314
  color: props.color
@@ -28025,17 +28034,17 @@
28025
28034
  return [
28026
28035
  tag === 'tbody'
28027
28036
  ? vue.h(tag, {
28028
- class: 'q-virtual-scroll__padding',
28029
- key: 'before',
28030
- ref: beforeRef
28031
- }, [
28032
- vue.h('tr', [
28033
- vue.h('td', {
28034
- style: { [ paddingSize ]: `${ virtualScrollPaddingBefore.value }px`, ...style },
28035
- colspan: colspanAttr.value
28036
- })
28037
- ])
28037
+ class: 'q-virtual-scroll__padding',
28038
+ key: 'before',
28039
+ ref: beforeRef
28040
+ }, [
28041
+ vue.h('tr', [
28042
+ vue.h('td', {
28043
+ style: { [ paddingSize ]: `${ virtualScrollPaddingBefore.value }px`, ...style },
28044
+ colspan: colspanAttr.value
28045
+ })
28038
28046
  ])
28047
+ ])
28039
28048
  : vue.h(tag, {
28040
28049
  class: 'q-virtual-scroll__padding',
28041
28050
  key: 'before',
@@ -28053,17 +28062,17 @@
28053
28062
 
28054
28063
  tag === 'tbody'
28055
28064
  ? vue.h(tag, {
28056
- class: 'q-virtual-scroll__padding',
28057
- key: 'after',
28058
- ref: afterRef
28059
- }, [
28060
- vue.h('tr', [
28061
- vue.h('td', {
28062
- style: { [ paddingSize ]: `${ virtualScrollPaddingAfter.value }px`, ...style },
28063
- colspan: colspanAttr.value
28064
- })
28065
- ])
28065
+ class: 'q-virtual-scroll__padding',
28066
+ key: 'after',
28067
+ ref: afterRef
28068
+ }, [
28069
+ vue.h('tr', [
28070
+ vue.h('td', {
28071
+ style: { [ paddingSize ]: `${ virtualScrollPaddingAfter.value }px`, ...style },
28072
+ colspan: colspanAttr.value
28073
+ })
28066
28074
  ])
28075
+ ])
28067
28076
  : vue.h(tag, {
28068
28077
  class: 'q-virtual-scroll__padding',
28069
28078
  key: 'after',
@@ -28724,7 +28733,7 @@
28724
28733
 
28725
28734
  return typeof val === 'function'
28726
28735
  ? val
28727
- : opt => (Object(opt) === opt && val in opt ? opt[ val ] : opt)
28736
+ : opt => (opt !== null && typeof opt === 'object' && val in opt ? opt[ val ] : opt)
28728
28737
  }
28729
28738
 
28730
28739
  function isOptionSelected (opt) {
@@ -29097,6 +29106,8 @@
29097
29106
  }
29098
29107
 
29099
29108
  function getInput (fromDialog, isTarget) {
29109
+ const attrs = isTarget === true ? { ...comboboxAttrs.value, ...state.splitAttrs.attributes.value } : void 0;
29110
+
29100
29111
  const data = {
29101
29112
  ref: isTarget === true ? targetRef : void 0,
29102
29113
  key: 'i_t',
@@ -29105,8 +29116,7 @@
29105
29116
  value: inputValue.value !== void 0 ? inputValue.value : '',
29106
29117
  // required for Android in order to show ENTER key when in form
29107
29118
  type: 'search',
29108
- ...comboboxAttrs.value,
29109
- ...state.splitAttrs.attributes.value,
29119
+ ...attrs,
29110
29120
  id: isTarget === true ? state.targetUid.value : void 0,
29111
29121
  maxlength: props.maxlength,
29112
29122
  autocomplete: props.autocomplete,
@@ -29586,13 +29596,16 @@
29586
29596
  }
29587
29597
  // there can be only one (when dialog is opened the control in dialog should be target)
29588
29598
  else if (state.editable.value === true) {
29599
+ const attrs = isTarget === true ? comboboxAttrs.value : void 0;
29600
+
29589
29601
  child.push(
29590
- vue.h('div', {
29602
+ vue.h('input', {
29591
29603
  ref: isTarget === true ? targetRef : void 0,
29592
29604
  key: 'd_t',
29593
29605
  class: 'q-select__focus-target',
29594
29606
  id: isTarget === true ? state.targetUid.value : void 0,
29595
- ...comboboxAttrs.value,
29607
+ readonly: true,
29608
+ ...attrs,
29596
29609
  onKeydown: onTargetKeydown,
29597
29610
  onKeyup: onTargetKeyup,
29598
29611
  onKeypress: onTargetKeypress
@@ -29622,9 +29635,11 @@
29622
29635
  );
29623
29636
  }
29624
29637
 
29638
+ const attrs = props.useInput === true || isTarget !== true ? void 0 : state.splitAttrs.attributes.value;
29639
+
29625
29640
  return vue.h('div', {
29626
29641
  class: 'q-field__native row items-center',
29627
- ...state.splitAttrs.attributes.value
29642
+ ...attrs
29628
29643
  }, child)
29629
29644
  },
29630
29645
 
@@ -32143,23 +32158,36 @@
32143
32158
 
32144
32159
  const hasPrefix = vue.computed(() => {
32145
32160
  return props.step.prefix
32146
- && isActive.value === false
32147
- && isError.value === false
32148
- && isDone.value === false
32161
+ && (isActive.value === false || props.stepper.activeIcon === 'none')
32162
+ && (isError.value === false || props.stepper.errorIcon === 'none')
32163
+ && (isDone.value === false || props.stepper.doneIcon === 'none')
32149
32164
  });
32150
32165
 
32151
32166
  const icon = vue.computed(() => {
32167
+ const defaultIcon = props.step.icon || props.stepper.inactiveIcon;
32168
+
32152
32169
  if (isActive.value === true) {
32153
- return props.step.activeIcon || props.stepper.activeIcon || $q.iconSet.stepper.active
32170
+ const icon = props.step.activeIcon || props.stepper.activeIcon;
32171
+ return icon === 'none'
32172
+ ? defaultIcon
32173
+ : icon || $q.iconSet.stepper.active
32154
32174
  }
32175
+
32155
32176
  if (isError.value === true) {
32156
- return props.step.errorIcon || props.stepper.errorIcon || $q.iconSet.stepper.error
32177
+ const icon = props.step.errorIcon || props.stepper.errorIcon;
32178
+ return icon === 'none'
32179
+ ? defaultIcon
32180
+ : icon || $q.iconSet.stepper.error
32157
32181
  }
32182
+
32158
32183
  if (isDisable.value === false && isDone.value === true) {
32159
- return props.step.doneIcon || props.stepper.doneIcon || $q.iconSet.stepper.done
32184
+ const icon = props.step.doneIcon || props.stepper.doneIcon;
32185
+ return icon === 'none'
32186
+ ? defaultIcon
32187
+ : icon || $q.iconSet.stepper.done
32160
32188
  }
32161
32189
 
32162
- return props.step.icon || props.stepper.inactiveIcon
32190
+ return defaultIcon
32163
32191
  });
32164
32192
 
32165
32193
  const color = vue.computed(() => {
@@ -32186,7 +32214,9 @@
32186
32214
  const classes = vue.computed(() => {
32187
32215
  return 'q-stepper__tab col-grow flex items-center no-wrap relative-position'
32188
32216
  + (color.value !== void 0 ? ` text-${ color.value }` : '')
32189
- + (isError.value === true ? ' q-stepper__tab--error' : '')
32217
+ + (isError.value === true
32218
+ ? ' q-stepper__tab--error q-stepper__tab--error-with-' + (hasPrefix.value === true ? 'prefix' : 'icon')
32219
+ : '')
32190
32220
  + (isActive.value === true ? ' q-stepper__tab--active' : '')
32191
32221
  + (isDone.value === true ? ' q-stepper__tab--done' : '')
32192
32222
  + (headerNav.value === true ? ' q-stepper__tab--navigation q-focusable q-hoverable' : '')
@@ -32327,14 +32357,14 @@
32327
32357
  || $stepper.value.vertical !== true
32328
32358
  ? {}
32329
32359
  : {
32330
- onScroll (e) {
32331
- const { target } = e;
32332
- if (target.scrollTop > 0) {
32333
- target.scrollTop = 0;
32360
+ onScroll (e) {
32361
+ const { target } = e;
32362
+ if (target.scrollTop > 0) {
32363
+ target.scrollTop = 0;
32364
+ }
32365
+ attrs.onScroll !== void 0 && attrs.onScroll(e);
32334
32366
  }
32335
- attrs.onScroll !== void 0 && attrs.onScroll(e);
32336
32367
  }
32337
- }
32338
32368
  ));
32339
32369
 
32340
32370
  const contentKey = vue.computed(() => (
@@ -32728,9 +32758,9 @@
32728
32758
 
32729
32759
  return props.type === '__qtable'
32730
32760
  ? getTableMiddle(
32731
- { ref: rootRef, class: 'q-table__middle ' + classes.value },
32732
- __getVirtualChildren()
32733
- )
32761
+ { ref: rootRef, class: 'q-table__middle ' + classes.value },
32762
+ __getVirtualChildren()
32763
+ )
32734
32764
  : vue.h(comps[ props.type ], {
32735
32765
  ...attrs,
32736
32766
  ref: rootRef,
@@ -32815,7 +32845,7 @@
32815
32845
  function sort (col /* String(col name) or Object(col definition) */) {
32816
32846
  let sortOrder = props.columnSortOrder;
32817
32847
 
32818
- if (col === Object(col)) {
32848
+ if (isObject(col) === true) {
32819
32849
  if (col.sortOrder) {
32820
32850
  sortOrder = col.sortOrder;
32821
32851
  }
@@ -33271,12 +33301,12 @@
33271
33301
 
33272
33302
  return row !== void 0
33273
33303
  ? Object.keys(row).map(name => ({
33274
- name,
33275
- label: name.toUpperCase(),
33276
- field: name,
33277
- align: isNumber(row[ name ]) ? 'right' : 'left',
33278
- sortable: true
33279
- }))
33304
+ name,
33305
+ label: name.toUpperCase(),
33306
+ field: name,
33307
+ align: isNumber(row[ name ]) ? 'right' : 'left',
33308
+ sortable: true
33309
+ }))
33280
33310
  : []
33281
33311
  });
33282
33312
 
@@ -34527,12 +34557,14 @@
34527
34557
  const mask = vue.computed(() => getMask());
34528
34558
  const locale = vue.computed(() => getLocale());
34529
34559
 
34560
+ const defaultDateModel = vue.computed(() => getDefaultDateModel());
34561
+
34530
34562
  const model = __splitDate(
34531
34563
  props.modelValue,
34532
- getMask(),
34533
- getLocale(),
34564
+ mask.value, // initial mask
34565
+ locale.value, // initial locale
34534
34566
  props.calendar,
34535
- getDefaultDateModel()
34567
+ defaultDateModel.value
34536
34568
  );
34537
34569
 
34538
34570
  const view = vue.ref(getViewByModel(model));
@@ -34572,8 +34604,6 @@
34572
34604
  }
34573
34605
  });
34574
34606
 
34575
- const defaultDateModel = vue.computed(() => getDefaultDateModel());
34576
-
34577
34607
  const computedFormat24h = vue.computed(() => (
34578
34608
  props.format24h !== null
34579
34609
  ? props.format24h
@@ -37550,15 +37580,15 @@
37550
37580
  || client.is.webkit === true || client.is.vivaldi === true
37551
37581
  )
37552
37582
  ? hexColor => {
37553
- const val = hexColor || getCssVar('primary');
37583
+ const val = hexColor || getCssVar('primary');
37554
37584
 
37555
- if (client.is.nativeMobile === true && window.StatusBar) {
37556
- window.StatusBar.backgroundColorByHexString(val);
37557
- }
37558
- else {
37559
- setColor(val);
37560
- }
37585
+ if (client.is.nativeMobile === true && window.StatusBar) {
37586
+ window.StatusBar.backgroundColorByHexString(val);
37587
+ }
37588
+ else {
37589
+ setColor(val);
37561
37590
  }
37591
+ }
37562
37592
  : noop,
37563
37593
 
37564
37594
  install ({ $q }) {
@@ -37765,9 +37795,9 @@
37765
37795
 
37766
37796
  return action.label === void 0
37767
37797
  ? vue.h(QSeparator, {
37768
- class: 'col-all',
37769
- dark: isDark.value
37770
- })
37798
+ class: 'col-all',
37799
+ dark: isDark.value
37800
+ })
37771
37801
  : vue.h('div', {
37772
37802
  class: [
37773
37803
  'q-bottom-sheet__item q-hoverable q-focusable cursor-pointer relative-position',
@@ -37784,9 +37814,9 @@
37784
37814
  : (
37785
37815
  img
37786
37816
  ? vue.h('img', {
37787
- class: action.avatar ? 'q-bottom-sheet__avatar' : '',
37788
- src: img
37789
- })
37817
+ class: action.avatar ? 'q-bottom-sheet__avatar' : '',
37818
+ src: img
37819
+ })
37790
37820
  : vue.h('div', { class: 'q-bottom-sheet__empty-icon' })
37791
37821
  ),
37792
37822
 
@@ -37818,9 +37848,9 @@
37818
37848
  : (
37819
37849
  img
37820
37850
  ? vue.h('img', {
37821
- class: action.avatar ? 'q-bottom-sheet__avatar' : '',
37822
- src: img
37823
- })
37851
+ class: action.avatar ? 'q-bottom-sheet__avatar' : '',
37852
+ src: img
37853
+ })
37824
37854
  : null
37825
37855
  )
37826
37856
  )
@@ -37849,8 +37879,8 @@
37849
37879
  child.push(
37850
37880
  props.grid === true
37851
37881
  ? vue.h('div', {
37852
- class: 'row items-stretch justify-start'
37853
- }, getGrid())
37882
+ class: 'row items-stretch justify-start'
37883
+ }, getGrid())
37854
37884
  : vue.h('div', getList())
37855
37885
  );
37856
37886
 
@@ -38066,7 +38096,11 @@
38066
38096
  string = decode$1(string.replace(/\+/g, ' '));
38067
38097
 
38068
38098
  try {
38069
- string = JSON.parse(string);
38099
+ const parsed = JSON.parse(string);
38100
+
38101
+ if (parsed === Object(parsed) || Array.isArray(parsed) === true) {
38102
+ string = parsed;
38103
+ }
38070
38104
  }
38071
38105
  catch (e) {}
38072
38106
 
@@ -38293,7 +38327,7 @@
38293
38327
  props.progress === false
38294
38328
  ? null
38295
38329
  : (
38296
- Object(props.progress) === props.progress
38330
+ isObject(props.progress) === true
38297
38331
  ? {
38298
38332
  component: props.progress.spinner || QSpinner,
38299
38333
  props: { color: props.progress.color || vmColor.value }
@@ -38322,7 +38356,7 @@
38322
38356
  });
38323
38357
 
38324
38358
  const okLabel = vue.computed(() => (
38325
- Object(props.ok) === props.ok
38359
+ isObject(props.ok) === true
38326
38360
  ? $q.lang.label.ok
38327
38361
  : (
38328
38362
  props.ok === true
@@ -38332,7 +38366,7 @@
38332
38366
  ));
38333
38367
 
38334
38368
  const cancelLabel = vue.computed(() => (
38335
- Object(props.cancel) === props.cancel
38369
+ isObject(props.cancel) === true
38336
38370
  ? $q.lang.label.cancel
38337
38371
  : (
38338
38372
  props.cancel === true
@@ -38358,7 +38392,7 @@
38358
38392
  label: okLabel.value,
38359
38393
  ripple: false,
38360
38394
  disable: okDisabled.value,
38361
- ...(Object(props.ok) === props.ok ? props.ok : { flat: true }),
38395
+ ...(isObject(props.ok) === true ? props.ok : { flat: true }),
38362
38396
  'data-autofocus': (props.focus === 'ok' && hasForm.value !== true) || void 0,
38363
38397
  onClick: onOk
38364
38398
  }));
@@ -38367,7 +38401,7 @@
38367
38401
  color: vmColor.value,
38368
38402
  label: cancelLabel.value,
38369
38403
  ripple: false,
38370
- ...(Object(props.cancel) === props.cancel ? props.cancel : { flat: true }),
38404
+ ...(isObject(props.cancel) === true ? props.cancel : { flat: true }),
38371
38405
  'data-autofocus': (props.focus === 'cancel' && hasForm.value !== true) || void 0,
38372
38406
  onClick: onCancel
38373
38407
  }));
@@ -38414,9 +38448,9 @@
38414
38448
  function getSection (classes, text) {
38415
38449
  return props.html === true
38416
38450
  ? vue.h(QCardSection, {
38417
- class: classes,
38418
- innerHTML: text
38419
- })
38451
+ class: classes,
38452
+ innerHTML: text
38453
+ })
38420
38454
  : vue.h(QCardSection, { class: classes }, () => text)
38421
38455
  }
38422
38456
 
@@ -38571,6 +38605,14 @@
38571
38605
  : {}
38572
38606
  );
38573
38607
 
38608
+ function onStart () {
38609
+ Plugin$3.isActive = true;
38610
+ }
38611
+
38612
+ function onStop () {
38613
+ Plugin$3.isActive = false;
38614
+ }
38615
+
38574
38616
  const el = createGlobalNode('q-loading-bar');
38575
38617
 
38576
38618
  createChildApp({
@@ -38579,23 +38621,21 @@
38579
38621
  // hide App from Vue devtools
38580
38622
  devtools: { hide: true },
38581
38623
 
38582
- setup: () => () => vue.h(QAjaxBar, { ...props.value, ref: barRef })
38624
+ setup: () => () => vue.h(QAjaxBar, { ...props.value, onStart, onStop, ref: barRef })
38583
38625
  }, parentApp).mount(el);
38584
38626
 
38585
38627
  Object.assign(this, {
38586
38628
  start (speed) {
38587
38629
  barRef.value.start(speed);
38588
- Plugin$3.isActive = true;
38589
38630
  },
38590
38631
  stop () {
38591
- const sessions = barRef.value.stop();
38592
- Plugin$3.isActive = sessions > 0;
38632
+ barRef.value.stop();
38593
38633
  },
38594
38634
  increment () {
38595
38635
  barRef.value.increment.apply(null, arguments);
38596
38636
  },
38597
38637
  setDefaults (opts) {
38598
- if (opts === Object(opts)) {
38638
+ if (isObject(opts) === true) {
38599
38639
  Object.assign(props.value, opts);
38600
38640
  }
38601
38641
  }
@@ -38630,7 +38670,7 @@
38630
38670
  }, {
38631
38671
  show (opts) {
38632
38672
 
38633
- props = opts === Object(opts) && opts.ignoreDefaults === true
38673
+ props = isObject(opts) === true && opts.ignoreDefaults === true
38634
38674
  ? { ...originalDefaults, ...opts }
38635
38675
  : { ...defaults$1, ...opts };
38636
38676
 
@@ -38731,7 +38771,7 @@
38731
38771
 
38732
38772
  setDefaults (opts) {
38733
38773
  {
38734
- opts === Object(opts) && Object.assign(defaults$1, opts);
38774
+ isObject(opts) === true && Object.assign(defaults$1, opts);
38735
38775
  }
38736
38776
  },
38737
38777
 
@@ -38806,7 +38846,7 @@
38806
38846
  Object.assign(notif, defaults);
38807
38847
  }
38808
38848
 
38809
- if (Object(config) !== config) {
38849
+ if (isObject(config) === false) {
38810
38850
  if (notif.type) {
38811
38851
  Object.assign(notif, notifTypes[ notif.type ]);
38812
38852
  }
@@ -39130,7 +39170,11 @@
39130
39170
  if (meta.hasMedia === true) {
39131
39171
  if (notif.spinner !== false) {
39132
39172
  mainChild.push(
39133
- vue.h(notif.spinner, { class: 'q-notification__spinner q-notification__spinner--' + meta.leftClass })
39173
+ vue.h(notif.spinner, {
39174
+ class: 'q-notification__spinner q-notification__spinner--' + meta.leftClass,
39175
+ color: notif.spinnerColor,
39176
+ size: notif.spinnerSize
39177
+ })
39134
39178
  );
39135
39179
  }
39136
39180
  else if (notif.icon) {
@@ -39138,6 +39182,8 @@
39138
39182
  vue.h(QIcon, {
39139
39183
  class: 'q-notification__icon q-notification__icon--' + meta.leftClass,
39140
39184
  name: notif.icon,
39185
+ color: notif.iconColor,
39186
+ size: notif.iconSize,
39141
39187
  role: 'img'
39142
39188
  })
39143
39189
  );
@@ -39218,12 +39264,12 @@
39218
39264
  var Notify = {
39219
39265
  setDefaults (opts) {
39220
39266
  {
39221
- opts === Object(opts) && Object.assign(defaults, opts);
39267
+ isObject(opts) === true && Object.assign(defaults, opts);
39222
39268
  }
39223
39269
  },
39224
39270
 
39225
39271
  registerType (typeName, typeOpts) {
39226
- if (typeOpts === Object(typeOpts)) {
39272
+ if (isObject(typeOpts) === true) {
39227
39273
  notifTypes[ typeName ] = typeOpts;
39228
39274
  }
39229
39275
  },
@@ -39257,10 +39303,10 @@
39257
39303
  };
39258
39304
 
39259
39305
  function encode (value) {
39260
- if (Object.prototype.toString.call(value) === '[object Date]') {
39306
+ if (isDate(value) === true) {
39261
39307
  return '__q_date|' + value.toUTCString()
39262
39308
  }
39263
- if (Object.prototype.toString.call(value) === '[object RegExp]') {
39309
+ if (isRegexp(value) === true) {
39264
39310
  return '__q_expr|' + value.source
39265
39311
  }
39266
39312
  if (typeof value === 'number') {
@@ -39527,7 +39573,7 @@
39527
39573
  });
39528
39574
 
39529
39575
  var index_umd = {
39530
- version: '2.5.4',
39576
+ version: '2.6.1',
39531
39577
  install (app, opts) {
39532
39578
  installQuasar(app, {
39533
39579
  components,