quasar 2.5.5 → 2.6.2

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 (355) hide show
  1. package/README.md +1 -1
  2. package/dist/api/Dialog.json +9 -2
  3. package/dist/api/QBreadcrumbsEl.json +5 -5
  4. package/dist/api/QBtn.json +2 -2
  5. package/dist/api/QBtnDropdown.json +2 -2
  6. package/dist/api/QExpansionItem.json +5 -5
  7. package/dist/api/QItem.json +5 -5
  8. package/dist/api/QKnob.json +5 -0
  9. package/dist/api/QRouteTab.json +5 -5
  10. package/dist/api/QSelect.json +8 -9
  11. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  12. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  13. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  14. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  15. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +6 -0
  16. package/dist/icon-set/fontawesome-v6.umd.prod.js +6 -0
  17. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  18. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  19. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  20. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  21. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  22. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  23. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  24. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  25. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  26. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +2 -2
  28. package/dist/icon-set/svg-eva-icons.umd.prod.js +2 -2
  29. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +2 -2
  30. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +6 -0
  31. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +2 -2
  34. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-mdi-v6.umd.prod.js +2 -2
  40. package/dist/icon-set/svg-themify.umd.prod.js +2 -2
  41. package/dist/icon-set/themify.umd.prod.js +1 -1
  42. package/dist/lang/ar.umd.prod.js +1 -1
  43. package/dist/lang/az-Latn.umd.prod.js +1 -1
  44. package/dist/lang/bg.umd.prod.js +1 -1
  45. package/dist/lang/bn.umd.prod.js +1 -1
  46. package/dist/lang/ca.umd.prod.js +1 -1
  47. package/dist/lang/cs.umd.prod.js +1 -1
  48. package/dist/lang/da.umd.prod.js +1 -1
  49. package/dist/lang/de.umd.prod.js +1 -1
  50. package/dist/lang/el.umd.prod.js +1 -1
  51. package/dist/lang/en-GB.umd.prod.js +1 -1
  52. package/dist/lang/en-US.umd.prod.js +1 -1
  53. package/dist/lang/eo.umd.prod.js +1 -1
  54. package/dist/lang/es.umd.prod.js +1 -1
  55. package/dist/lang/et.umd.prod.js +1 -1
  56. package/dist/lang/eu.umd.prod.js +6 -0
  57. package/dist/lang/fa-IR.umd.prod.js +1 -1
  58. package/dist/lang/fa.umd.prod.js +1 -1
  59. package/dist/lang/fi.umd.prod.js +1 -1
  60. package/dist/lang/fr.umd.prod.js +1 -1
  61. package/dist/lang/gn.umd.prod.js +1 -1
  62. package/dist/lang/he.umd.prod.js +1 -1
  63. package/dist/lang/hr.umd.prod.js +1 -1
  64. package/dist/lang/hu.umd.prod.js +1 -1
  65. package/dist/lang/id.umd.prod.js +1 -1
  66. package/dist/lang/is.umd.prod.js +1 -1
  67. package/dist/lang/it.umd.prod.js +1 -1
  68. package/dist/lang/ja.umd.prod.js +1 -1
  69. package/dist/lang/km.umd.prod.js +1 -1
  70. package/dist/lang/ko-KR.umd.prod.js +1 -1
  71. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  72. package/dist/lang/kz.umd.prod.js +6 -0
  73. package/dist/lang/lt.umd.prod.js +1 -1
  74. package/dist/lang/lu.umd.prod.js +1 -1
  75. package/dist/lang/lv.umd.prod.js +1 -1
  76. package/dist/lang/ml.umd.prod.js +1 -1
  77. package/dist/lang/ms.umd.prod.js +1 -1
  78. package/dist/lang/my.umd.prod.js +1 -1
  79. package/dist/lang/nb-NO.umd.prod.js +1 -1
  80. package/dist/lang/nl.umd.prod.js +1 -1
  81. package/dist/lang/pl.umd.prod.js +1 -1
  82. package/dist/lang/pt-BR.umd.prod.js +1 -1
  83. package/dist/lang/pt.umd.prod.js +1 -1
  84. package/dist/lang/ro.umd.prod.js +1 -1
  85. package/dist/lang/ru.umd.prod.js +1 -1
  86. package/dist/lang/sk.umd.prod.js +1 -1
  87. package/dist/lang/sl.umd.prod.js +1 -1
  88. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  89. package/dist/lang/sr.umd.prod.js +1 -1
  90. package/dist/lang/sv.umd.prod.js +1 -1
  91. package/dist/lang/ta.umd.prod.js +1 -1
  92. package/dist/lang/th.umd.prod.js +1 -1
  93. package/dist/lang/tr.umd.prod.js +1 -1
  94. package/dist/lang/ug.umd.prod.js +2 -2
  95. package/dist/lang/uk.umd.prod.js +1 -1
  96. package/dist/lang/vi.umd.prod.js +1 -1
  97. package/dist/lang/zh-CN.umd.prod.js +1 -1
  98. package/dist/lang/zh-TW.umd.prod.js +1 -1
  99. package/dist/quasar.cjs.prod.js +2 -2
  100. package/dist/quasar.css +2 -4
  101. package/dist/quasar.esm.prod.js +2 -2
  102. package/dist/quasar.prod.css +1 -1
  103. package/dist/quasar.rtl.css +2 -4
  104. package/dist/quasar.rtl.prod.css +1 -1
  105. package/dist/quasar.sass +2 -1
  106. package/dist/quasar.umd.js +334 -251
  107. package/dist/quasar.umd.prod.js +2 -2
  108. package/dist/types/extras/icon-set.d.ts +3 -0
  109. package/dist/types/globals.d.ts +2 -2
  110. package/dist/types/index.d.ts +35 -27
  111. package/dist/vetur/quasar-attributes.json +28 -24
  112. package/dist/vetur/quasar-tags.json +1 -0
  113. package/dist/web-types/web-types.json +35 -25
  114. package/icon-set/bootstrap-icons.js +11 -6
  115. package/icon-set/bootstrap-icons.mjs +136 -0
  116. package/icon-set/eva-icons.js +10 -5
  117. package/icon-set/{svg-mdi-v4.js → eva-icons.mjs} +62 -94
  118. package/icon-set/fontawesome-v5-pro.js +6 -1
  119. package/icon-set/fontawesome-v5-pro.mjs +128 -0
  120. package/icon-set/fontawesome-v5.js +6 -1
  121. package/icon-set/fontawesome-v5.mjs +128 -0
  122. package/icon-set/fontawesome-v6-pro.js +133 -0
  123. package/icon-set/fontawesome-v6-pro.mjs +128 -0
  124. package/icon-set/fontawesome-v6.js +133 -0
  125. package/icon-set/fontawesome-v6.mjs +128 -0
  126. package/icon-set/ionicons-v4.js +10 -5
  127. package/icon-set/ionicons-v4.mjs +180 -0
  128. package/icon-set/line-awesome.js +6 -1
  129. package/icon-set/line-awesome.mjs +128 -0
  130. package/icon-set/material-icons-outlined.js +6 -1
  131. package/icon-set/material-icons-outlined.mjs +128 -0
  132. package/icon-set/material-icons-round.js +6 -1
  133. package/icon-set/material-icons-round.mjs +128 -0
  134. package/icon-set/material-icons-sharp.js +6 -1
  135. package/icon-set/material-icons-sharp.mjs +128 -0
  136. package/icon-set/material-icons.js +6 -1
  137. package/icon-set/material-icons.mjs +128 -0
  138. package/icon-set/mdi-v3.js +6 -1
  139. package/icon-set/mdi-v3.mjs +141 -0
  140. package/icon-set/mdi-v4.js +6 -1
  141. package/icon-set/mdi-v4.mjs +141 -0
  142. package/icon-set/mdi-v5.js +6 -1
  143. package/icon-set/mdi-v5.mjs +141 -0
  144. package/icon-set/mdi-v6.js +6 -1
  145. package/icon-set/mdi-v6.mjs +141 -0
  146. package/icon-set/svg-bootstrap-icons.js +10 -11
  147. package/icon-set/svg-bootstrap-icons.mjs +210 -0
  148. package/icon-set/svg-eva-icons.js +9 -10
  149. package/icon-set/svg-eva-icons.mjs +233 -0
  150. package/icon-set/svg-fontawesome-v5.js +5 -6
  151. package/icon-set/svg-fontawesome-v5.mjs +197 -0
  152. package/icon-set/svg-fontawesome-v6.js +198 -0
  153. package/icon-set/svg-fontawesome-v6.mjs +198 -0
  154. package/icon-set/svg-ionicons-v4.js +9 -10
  155. package/icon-set/svg-ionicons-v4.mjs +234 -0
  156. package/icon-set/svg-ionicons-v5.js +7 -7
  157. package/icon-set/svg-ionicons-v5.mjs +225 -0
  158. package/icon-set/svg-ionicons-v6.js +7 -7
  159. package/icon-set/svg-ionicons-v6.mjs +225 -0
  160. package/icon-set/svg-line-awesome.js +5 -5
  161. package/icon-set/svg-line-awesome.mjs +198 -0
  162. package/icon-set/svg-material-icons-outlined.js +5 -5
  163. package/icon-set/svg-material-icons-outlined.mjs +203 -0
  164. package/icon-set/svg-material-icons-round.js +5 -5
  165. package/icon-set/svg-material-icons-round.mjs +203 -0
  166. package/icon-set/svg-material-icons-sharp.js +5 -5
  167. package/icon-set/svg-material-icons-sharp.mjs +203 -0
  168. package/icon-set/svg-material-icons.js +5 -5
  169. package/icon-set/svg-material-icons.mjs +203 -0
  170. package/icon-set/svg-mdi-v6.js +5 -5
  171. package/icon-set/{svg-mdi-v5.js → svg-mdi-v6.mjs} +6 -6
  172. package/icon-set/svg-themify.js +9 -10
  173. package/icon-set/svg-themify.mjs +231 -0
  174. package/icon-set/themify.js +10 -5
  175. package/icon-set/themify.mjs +169 -0
  176. package/lang/ar.js +6 -1
  177. package/lang/ar.mjs +96 -0
  178. package/lang/az-Latn.js +6 -1
  179. package/lang/az-Latn.mjs +91 -0
  180. package/lang/bg.js +6 -1
  181. package/lang/bg.mjs +91 -0
  182. package/lang/bn.js +6 -1
  183. package/lang/bn.mjs +91 -0
  184. package/lang/ca.js +6 -1
  185. package/lang/ca.mjs +91 -0
  186. package/lang/cs.js +6 -1
  187. package/lang/cs.mjs +102 -0
  188. package/lang/da.js +6 -1
  189. package/lang/da.mjs +91 -0
  190. package/lang/de.js +6 -1
  191. package/lang/de.mjs +91 -0
  192. package/lang/el.js +6 -1
  193. package/lang/el.mjs +91 -0
  194. package/lang/en-GB.js +6 -1
  195. package/lang/en-GB.mjs +91 -0
  196. package/lang/en-US.js +6 -1
  197. package/lang/en-US.mjs +91 -0
  198. package/lang/eo.js +6 -1
  199. package/lang/eo.mjs +91 -0
  200. package/lang/es.js +6 -1
  201. package/lang/es.mjs +91 -0
  202. package/lang/et.js +6 -1
  203. package/lang/et.mjs +91 -0
  204. package/lang/eu.js +96 -0
  205. package/lang/eu.mjs +91 -0
  206. package/lang/fa-IR.js +6 -1
  207. package/lang/fa-IR.mjs +92 -0
  208. package/lang/fa.js +6 -1
  209. package/lang/fa.mjs +92 -0
  210. package/lang/fi.js +6 -1
  211. package/lang/fi.mjs +92 -0
  212. package/lang/fr.js +6 -1
  213. package/lang/fr.mjs +94 -0
  214. package/lang/gn.js +6 -1
  215. package/lang/gn.mjs +91 -0
  216. package/lang/he.js +6 -1
  217. package/lang/he.mjs +92 -0
  218. package/lang/hr.js +6 -1
  219. package/lang/hr.mjs +91 -0
  220. package/lang/hu.js +6 -1
  221. package/lang/hu.mjs +91 -0
  222. package/lang/id.js +6 -1
  223. package/lang/id.mjs +91 -0
  224. package/lang/index.json +8 -0
  225. package/lang/is.js +6 -1
  226. package/lang/is.mjs +91 -0
  227. package/lang/it.js +6 -1
  228. package/lang/it.mjs +91 -0
  229. package/lang/ja.js +6 -1
  230. package/lang/ja.mjs +90 -0
  231. package/lang/km.js +6 -1
  232. package/lang/km.mjs +91 -0
  233. package/lang/ko-KR.js +6 -1
  234. package/lang/ko-KR.mjs +91 -0
  235. package/lang/kur-CKB.js +6 -1
  236. package/lang/kur-CKB.mjs +101 -0
  237. package/lang/kz.js +100 -0
  238. package/lang/kz.mjs +95 -0
  239. package/lang/lt.js +6 -1
  240. package/lang/lt.mjs +103 -0
  241. package/lang/lu.js +6 -1
  242. package/lang/lu.mjs +91 -0
  243. package/lang/lv.js +6 -1
  244. package/lang/lv.mjs +91 -0
  245. package/lang/ml.js +6 -1
  246. package/lang/ml.mjs +95 -0
  247. package/lang/ms.js +6 -1
  248. package/lang/ms.mjs +91 -0
  249. package/lang/my.js +6 -1
  250. package/lang/my.mjs +90 -0
  251. package/lang/nb-NO.js +6 -1
  252. package/lang/nb-NO.mjs +92 -0
  253. package/lang/nl.js +6 -1
  254. package/lang/nl.mjs +91 -0
  255. package/lang/pl.js +6 -1
  256. package/lang/pl.mjs +91 -0
  257. package/lang/pt-BR.js +6 -1
  258. package/lang/pt-BR.mjs +91 -0
  259. package/lang/pt.js +6 -1
  260. package/lang/pt.mjs +91 -0
  261. package/lang/ro.js +6 -1
  262. package/lang/ro.mjs +91 -0
  263. package/lang/ru.js +6 -1
  264. package/lang/ru.mjs +95 -0
  265. package/lang/sk.js +6 -1
  266. package/lang/sk.mjs +91 -0
  267. package/lang/sl.js +6 -1
  268. package/lang/sl.mjs +91 -0
  269. package/lang/sr-CYR.js +6 -1
  270. package/lang/sr-CYR.mjs +91 -0
  271. package/lang/sr.js +6 -1
  272. package/lang/sr.mjs +91 -0
  273. package/lang/sv.js +6 -1
  274. package/lang/sv.mjs +91 -0
  275. package/lang/ta.js +6 -1
  276. package/lang/ta.mjs +91 -0
  277. package/lang/th.js +6 -1
  278. package/lang/th.mjs +91 -0
  279. package/lang/tr.js +6 -1
  280. package/lang/tr.mjs +87 -0
  281. package/lang/ug.js +55 -51
  282. package/lang/ug.mjs +91 -0
  283. package/lang/uk.js +7 -2
  284. package/lang/uk.mjs +95 -0
  285. package/lang/vi.js +6 -1
  286. package/lang/vi.mjs +91 -0
  287. package/lang/zh-CN.js +6 -1
  288. package/lang/zh-CN.mjs +90 -0
  289. package/lang/zh-TW.js +6 -1
  290. package/lang/zh-TW.mjs +90 -0
  291. package/package.json +7 -5
  292. package/src/components/btn/QBtn.js +16 -14
  293. package/src/components/btn/use-btn.js +7 -7
  294. package/src/components/btn/use-btn.json +2 -2
  295. package/src/components/date/QDate.js +2 -2
  296. package/src/components/dialog/QDialog.js +11 -11
  297. package/src/components/dialog-bottom-sheet/BottomSheet.js +11 -11
  298. package/src/components/dialog-plugin/DialogPlugin.js +6 -6
  299. package/src/components/editor/QEditor.js +10 -10
  300. package/src/components/editor/editor-caret.js +1 -1
  301. package/src/components/editor/editor-utils.js +2 -2
  302. package/src/components/fab/QFab.js +1 -1
  303. package/src/components/file/QFile.js +2 -1
  304. package/src/components/icon/QIcon.js +2 -1
  305. package/src/components/infinite-scroll/QInfiniteScroll.js +3 -1
  306. package/src/components/inner-loading/QInnerLoading.js +7 -7
  307. package/src/components/input/QInput.js +4 -1
  308. package/src/components/knob/QKnob.js +5 -2
  309. package/src/components/knob/QKnob.json +6 -0
  310. package/src/components/linear-progress/QLinearProgress.sass +1 -0
  311. package/src/components/menu/QMenu.js +13 -13
  312. package/src/components/page-scroller/QPageScroller.js +4 -4
  313. package/src/components/pull-to-refresh/QPullToRefresh.js +5 -5
  314. package/src/components/select/QSelect.js +28 -7
  315. package/src/components/select/QSelect.json +4 -7
  316. package/src/components/slider/use-slider.js +4 -4
  317. package/src/components/stepper/QStep.js +6 -6
  318. package/src/components/table/table-column-selection.js +6 -6
  319. package/src/components/table/table-sort.js +2 -2
  320. package/src/components/tabs/QTabs.js +4 -4
  321. package/src/components/tooltip/QTooltip.js +12 -12
  322. package/src/components/uploader/uploader-core.js +11 -10
  323. package/src/components/virtual-scroll/QVirtualScroll.js +3 -3
  324. package/src/components/virtual-scroll/use-virtual-scroll.js +20 -20
  325. package/src/composables/private/__tests__/use-transition.spec.js +2 -2
  326. package/src/composables/private/use-field.js +25 -17
  327. package/src/composables/private/use-file-dom-props.js +5 -5
  328. package/src/composables/private/use-file.js +15 -12
  329. package/src/composables/private/use-router-link.js +2 -2
  330. package/src/composables/private/use-router-link.json +5 -5
  331. package/src/directives/Morph.js +12 -3
  332. package/src/icon-set.js +2 -1
  333. package/src/install-quasar.js +3 -3
  334. package/src/lang.js +2 -1
  335. package/src/plugins/AddressbarColor.js +7 -7
  336. package/src/plugins/Cookies.js +5 -1
  337. package/src/plugins/Dialog.json +3 -2
  338. package/src/plugins/Loading.js +3 -3
  339. package/src/plugins/LoadingBar.js +12 -6
  340. package/src/plugins/Notify.js +4 -4
  341. package/src/utils/create-meta-mixin.js +4 -4
  342. package/src/utils/create-uploader-component.js +2 -2
  343. package/src/utils/date.js +8 -12
  344. package/src/utils/event.js +3 -3
  345. package/src/utils/extend.js +33 -5
  346. package/src/utils/morph.js +2 -2
  347. package/src/utils/private/is.js +4 -2
  348. package/src/utils/private/noop-ssr-directive-transform.js +1 -1
  349. package/wrappers/index.js +33 -5
  350. package/wrappers/index.mjs +63 -0
  351. package/dist/icon-set/svg-mdi-v4.umd.prod.js +0 -6
  352. package/dist/icon-set/svg-mdi-v5.umd.prod.js +0 -6
  353. package/dist/ssr-directives/Morph.js +0 -55
  354. package/dist/ssr-directives/index.js +0 -14
  355. package/src/directives/Morph.ssr.js +0 -45
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.5.5
2
+ * Quasar Framework v2.6.2
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);
@@ -1523,8 +1523,10 @@
1523
1523
  return a !== a && b !== b // eslint-disable-line no-self-compare
1524
1524
  }
1525
1525
 
1526
- function isPlainObject (v) {
1527
- return Object.prototype.toString.call(v) === '[object Object]'
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
1528
1530
  }
1529
1531
 
1530
1532
  function isDate (v) {
@@ -1574,13 +1576,13 @@
1574
1576
  installPlugins(pluginOpts, autoInstalledPlugins);
1575
1577
 
1576
1578
  uiOpts.components !== void 0 && Object.values(uiOpts.components).forEach(c => {
1577
- if (isPlainObject(c) === true && c.name !== void 0) {
1579
+ if (isObject(c) === true && c.name !== void 0) {
1578
1580
  app.component(c.name, c);
1579
1581
  }
1580
1582
  });
1581
1583
 
1582
1584
  uiOpts.directives !== void 0 && Object.values(uiOpts.directives).forEach(d => {
1583
- if (isPlainObject(d) === true && d.name !== void 0) {
1585
+ if (isObject(d) === true && d.name !== void 0) {
1584
1586
  app.directive(d.name, d);
1585
1587
  }
1586
1588
  });
@@ -1601,7 +1603,7 @@
1601
1603
  }
1602
1604
 
1603
1605
  var installQuasar = function (parentApp, opts = {}) {
1604
- const $q = { version: '2.5.5' };
1606
+ const $q = { version: '2.6.2' };
1605
1607
 
1606
1608
  if (globalConfigIsFrozen === false) {
1607
1609
  if (opts.config !== void 0) {
@@ -2064,6 +2066,7 @@
2064
2066
  const svgUseRE = /^svguse:/;
2065
2067
  const ionRE = /^ion-/;
2066
2068
  const faLaRE = /^[lf]a[srlbdk]? /;
2069
+ const fa6RE = /^fa-(solid|regular|light|brands|duotone|thin)/;
2067
2070
 
2068
2071
  var QIcon = createComponent({
2069
2072
  name: 'QIcon',
@@ -2157,7 +2160,7 @@
2157
2160
  if (matches !== null) {
2158
2161
  cls = libMap[ matches[ 1 ] ](icon);
2159
2162
  }
2160
- else if (faLaRE.test(icon) === true) {
2163
+ else if (faLaRE.test(icon) === true || fa6RE.test(icon) === true) {
2161
2164
  cls = icon;
2162
2165
  }
2163
2166
  else if (ionRE.test(icon) === true) {
@@ -2788,8 +2791,8 @@
2788
2791
  // avoid comparing the child with its parent
2789
2792
  && currentMatched[ currentMatched.length - 1 ].path !== parentRecordPath
2790
2793
  ? currentMatched.findIndex(
2791
- isSameRouteRecord.bind(null, matched[ length - 2 ])
2792
- )
2794
+ isSameRouteRecord.bind(null, matched[ length - 2 ])
2795
+ )
2793
2796
  : index
2794
2797
  )
2795
2798
  });
@@ -3308,13 +3311,13 @@
3308
3311
 
3309
3312
  return props.padding !== void 0
3310
3313
  ? Object.assign({}, obj, {
3311
- padding: props.padding
3312
- .split(/\s+/)
3313
- .map(v => (v in padding ? padding[ v ] + 'px' : v))
3314
- .join(' '),
3315
- minWidth: '0',
3316
- minHeight: '0'
3317
- })
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
+ })
3318
3321
  : obj
3319
3322
  });
3320
3323
 
@@ -3493,7 +3496,7 @@
3493
3496
  onClick,
3494
3497
  onKeydown,
3495
3498
  onMousedown,
3496
- onTouchstartPassive
3499
+ onTouchstart
3497
3500
  }
3498
3501
  }
3499
3502
 
@@ -3562,12 +3565,12 @@
3562
3565
  // is it already destroyed?
3563
3566
  if (rootRef.value === null) { return }
3564
3567
 
3565
- if (isKeyCode(e, [ 13, 32 ]) === true) {
3566
- stopAndPrevent(e);
3568
+ emit('keydown', e);
3567
3569
 
3568
- if (keyboardTarget !== rootRef.value) {
3569
- keyboardTarget !== null && cleanup();
3570
+ if (isKeyCode(e, [ 13, 32 ]) === true && keyboardTarget !== rootRef.value) {
3571
+ keyboardTarget !== null && cleanup();
3570
3572
 
3573
+ if (e.defaultPrevented !== true) {
3571
3574
  // focus external button if the focus helper was focused before
3572
3575
  rootRef.value.focus();
3573
3576
 
@@ -3576,15 +3579,19 @@
3576
3579
  document.addEventListener('keyup', onPressEnd, true);
3577
3580
  rootRef.value.addEventListener('blur', onPressEnd, passiveCapture);
3578
3581
  }
3579
- }
3580
3582
 
3581
- emit('keydown', e);
3583
+ stopAndPrevent(e);
3584
+ }
3582
3585
  }
3583
3586
 
3584
- function onTouchstartPassive (e) {
3587
+ function onTouchstart (e) {
3585
3588
  // is it already destroyed?
3586
3589
  if (rootRef.value === null) { return }
3587
3590
 
3591
+ emit('touchstart', e);
3592
+
3593
+ if (e.defaultPrevented === true) { return }
3594
+
3588
3595
  if (touchTarget !== rootRef.value) {
3589
3596
  touchTarget !== null && cleanup();
3590
3597
  touchTarget = rootRef.value;
@@ -3601,23 +3608,21 @@
3601
3608
  mouseTimer = setTimeout(() => {
3602
3609
  avoidMouseRipple = false;
3603
3610
  }, 200);
3604
-
3605
- emit('touchstart', e);
3606
3611
  }
3607
3612
 
3608
3613
  function onMousedown (e) {
3609
3614
  // is it already destroyed?
3610
3615
  if (rootRef.value === null) { return }
3611
3616
 
3612
- if (mouseTarget !== rootRef.value) {
3617
+ e.qSkipRipple = avoidMouseRipple === true;
3618
+ emit('mousedown', e);
3619
+
3620
+ if (e.defaultPrevented !== true && mouseTarget !== rootRef.value) {
3613
3621
  mouseTarget !== null && cleanup();
3614
3622
  mouseTarget = rootRef.value;
3615
3623
  rootRef.value.classList.add('q-btn--active');
3616
3624
  document.addEventListener('mouseup', onPressEnd, passiveCapture);
3617
3625
  }
3618
-
3619
- e.qSkipRipple = avoidMouseRipple === true;
3620
- emit('mousedown', e);
3621
3626
  }
3622
3627
 
3623
3628
  function onPressEnd (e) {
@@ -5453,19 +5458,19 @@
5453
5458
  () => (
5454
5459
  showing.value === true
5455
5460
  ? vue.h('div', {
5456
- ...attrs,
5457
- ref: innerRef,
5458
- tabindex: -1,
5459
- class: [
5460
- 'q-menu q-position-engine scroll' + menuClass.value,
5461
- attrs.class
5462
- ],
5463
- style: [
5464
- attrs.style,
5465
- transitionStyle.value
5466
- ],
5467
- ...onEvents.value
5468
- }, 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))
5469
5474
  : null
5470
5475
  )
5471
5476
  )
@@ -8575,7 +8580,7 @@
8575
8580
  if (typeof def === 'function') {
8576
8581
  return markerTicks.value.map(value => {
8577
8582
  const item = def(value);
8578
- return isPlainObject(item) === true ? { ...item, value } : { value, label: item }
8583
+ return isObject(item) === true ? { ...item, value } : { value, label: item }
8579
8584
  })
8580
8585
  }
8581
8586
 
@@ -8583,14 +8588,14 @@
8583
8588
 
8584
8589
  if (Array.isArray(def) === true) {
8585
8590
  return def
8586
- .map(item => (isPlainObject(item) === true ? item : { value: item }))
8591
+ .map(item => (isObject(item) === true ? item : { value: item }))
8587
8592
  .filter(filterFn)
8588
8593
  }
8589
8594
 
8590
8595
  return Object.keys(def).map(key => {
8591
8596
  const item = def[ key ];
8592
8597
  const value = Number(key);
8593
- return isPlainObject(item) === true ? { ...item, value } : { value, label: item }
8598
+ return isObject(item) === true ? { ...item, value } : { value, label: item }
8594
8599
  }).filter(filterFn)
8595
8600
  }
8596
8601
 
@@ -9622,11 +9627,11 @@
9622
9627
  let wasItActive = wasActive === true
9623
9628
  ? emptyFn
9624
9629
  : tab => {
9625
- if (model === tab.name.value) {
9626
- wasActive = true;
9627
- wasItActive = emptyFn;
9628
- }
9629
- };
9630
+ if (model === tab.name.value) {
9631
+ wasActive = true;
9632
+ wasItActive = emptyFn;
9633
+ }
9634
+ };
9630
9635
 
9631
9636
  const tabList = getRouteList();
9632
9637
 
@@ -12359,16 +12364,16 @@
12359
12364
 
12360
12365
  const formatter = {
12361
12366
  // Year: 00, 01, ..., 99
12362
- YY (date, _, forcedYear) {
12367
+ YY (date, dateLocale, forcedYear) {
12363
12368
  // workaround for < 1900 with new Date()
12364
- const y = this.YYYY(date, _, forcedYear) % 100;
12369
+ const y = this.YYYY(date, dateLocale, forcedYear) % 100;
12365
12370
  return y > 0
12366
12371
  ? pad(y)
12367
12372
  : '-' + pad(Math.abs(y))
12368
12373
  },
12369
12374
 
12370
12375
  // Year: 1900, 1901, ..., 2099
12371
- YYYY (date, _, forcedYear) {
12376
+ YYYY (date, _dateLocale, forcedYear) {
12372
12377
  // workaround for < 1900 with new Date()
12373
12378
  return forcedYear !== void 0 && forcedYear !== null
12374
12379
  ? forcedYear
@@ -12478,13 +12483,9 @@
12478
12483
  // Hour: 1, 2, ..., 12
12479
12484
  h (date) {
12480
12485
  const hours = date.getHours();
12481
- if (hours === 0) {
12482
- return 12
12483
- }
12484
- if (hours > 12) {
12485
- return hours % 12
12486
- }
12487
- return hours
12486
+ return hours === 0
12487
+ ? 12
12488
+ : (hours > 12 ? hours % 12 : hours)
12488
12489
  },
12489
12490
 
12490
12491
  // Hour: 01, 02, ..., 12
@@ -12543,7 +12544,7 @@
12543
12544
  },
12544
12545
 
12545
12546
  // Timezone: -01:00, +00:00, ... +12:00
12546
- Z (date, dateLocale, forcedYear, forcedTimezoneOffset) {
12547
+ Z (date, _dateLocale, _forcedYear, forcedTimezoneOffset) {
12547
12548
  const tzOffset = forcedTimezoneOffset === void 0 || forcedTimezoneOffset === null
12548
12549
  ? date.getTimezoneOffset()
12549
12550
  : forcedTimezoneOffset;
@@ -12552,7 +12553,7 @@
12552
12553
  },
12553
12554
 
12554
12555
  // Timezone: -0100, +0000, ... +1200
12555
- ZZ (date, dateLocale, forcedYear, forcedTimezoneOffset) {
12556
+ ZZ (date, _dateLocale, _forcedYear, forcedTimezoneOffset) {
12556
12557
  const tzOffset = forcedTimezoneOffset === void 0 || forcedTimezoneOffset === null
12557
12558
  ? date.getTimezoneOffset()
12558
12559
  : forcedTimezoneOffset;
@@ -12783,7 +12784,7 @@
12783
12784
  const rangeModel = vue.computed(() => {
12784
12785
  const fn = date => decodeString(date, innerMask.value, innerLocale.value);
12785
12786
  return normalizedModel.value
12786
- .filter(date => isPlainObject(date) === true && date.from !== void 0 && date.to !== void 0)
12787
+ .filter(date => isObject(date) === true && date.from !== void 0 && date.to !== void 0)
12787
12788
  .map(range => ({ from: fn(range.from), to: fn(range.to) }))
12788
12789
  .filter(range => range.from.dateHash !== null && range.to.dateHash !== null && range.from.dateHash < range.to.dateHash)
12789
12790
  });
@@ -14683,11 +14684,11 @@
14683
14684
  }, () => (
14684
14685
  useBackdrop.value === true
14685
14686
  ? vue.h('div', {
14686
- class: 'q-dialog__backdrop fixed-full',
14687
- style: transitionStyle.value,
14688
- 'aria-hidden': 'true',
14689
- onMousedown: onBackdropClick
14690
- })
14687
+ class: 'q-dialog__backdrop fixed-full',
14688
+ style: transitionStyle.value,
14689
+ 'aria-hidden': 'true',
14690
+ onMousedown: onBackdropClick
14691
+ })
14691
14692
  : null
14692
14693
  )),
14693
14694
 
@@ -14697,12 +14698,12 @@
14697
14698
  () => (
14698
14699
  showing.value === true
14699
14700
  ? vue.h('div', {
14700
- ref: innerRef,
14701
- class: classes.value,
14702
- style: transitionStyle.value,
14703
- tabindex: -1,
14704
- ...onEvents.value
14705
- }, hSlot(slots.default))
14701
+ ref: innerRef,
14702
+ class: classes.value,
14703
+ style: transitionStyle.value,
14704
+ tabindex: -1,
14705
+ ...onEvents.value
14706
+ }, hSlot(slots.default))
14706
14707
  : null
14707
14708
  )
14708
14709
  )
@@ -15597,7 +15598,7 @@
15597
15598
  return false
15598
15599
  }
15599
15600
 
15600
- if (el !== null && list.includes(el.nodeName.toLowerCase()) === true) {
15601
+ if (list.includes(el.nodeName.toLowerCase()) === true) {
15601
15602
  return true
15602
15603
  }
15603
15604
 
@@ -16023,18 +16024,18 @@
16023
16024
  function getTooltipContent () {
16024
16025
  return showing.value === true
16025
16026
  ? vue.h('div', {
16026
- ...attrs,
16027
- ref: innerRef,
16028
- class: [
16029
- 'q-tooltip q-tooltip--style q-position-engine no-pointer-events',
16030
- attrs.class
16031
- ],
16032
- style: [
16033
- attrs.style,
16034
- transitionStyle.value
16035
- ],
16036
- role: 'complementary'
16037
- }, hSlot(slots.default))
16027
+ ...attrs,
16028
+ ref: innerRef,
16029
+ class: [
16030
+ 'q-tooltip q-tooltip--style q-position-engine no-pointer-events',
16031
+ attrs.class
16032
+ ],
16033
+ style: [
16034
+ attrs.style,
16035
+ transitionStyle.value
16036
+ ],
16037
+ role: 'complementary'
16038
+ }, hSlot(slots.default))
16038
16039
  : null
16039
16040
  }
16040
16041
 
@@ -16249,8 +16250,8 @@
16249
16250
  if (btn.tip && eVm.$q.platform.is.desktop) {
16250
16251
  const Key = btn.key
16251
16252
  ? vue.h('div', [
16252
- vue.h('small', `(CTRL + ${ String.fromCharCode(btn.key) })`)
16253
- ])
16253
+ vue.h('small', `(CTRL + ${ String.fromCharCode(btn.key) })`)
16254
+ ])
16254
16255
  : null;
16255
16256
  child.push(
16256
16257
  vue.h(QTooltip, { delay: 1000 }, () => [
@@ -16536,6 +16537,36 @@
16536
16537
  return acc
16537
16538
  }
16538
16539
 
16540
+ const
16541
+ toString = Object.prototype.toString,
16542
+ hasOwn = Object.prototype.hasOwnProperty,
16543
+ class2type = {};
16544
+
16545
+ 'Boolean Number String Function Array Date RegExp Object'.split(' ').forEach(name => {
16546
+ class2type[ '[object ' + name + ']' ] = name.toLowerCase();
16547
+ });
16548
+
16549
+ function type (obj) {
16550
+ return obj === null ? String(obj) : class2type[ toString.call(obj) ] || 'object'
16551
+ }
16552
+
16553
+ function isPlainObject (obj) {
16554
+ if (!obj || type(obj) !== 'object') {
16555
+ return false
16556
+ }
16557
+
16558
+ if (obj.constructor
16559
+ && !hasOwn.call(obj, 'constructor')
16560
+ && !hasOwn.call(obj.constructor.prototype, 'isPrototypeOf')) {
16561
+ return false
16562
+ }
16563
+
16564
+ let key;
16565
+ for (key in obj) {} // eslint-disable-line
16566
+
16567
+ return key === void 0 || hasOwn.call(obj, key)
16568
+ }
16569
+
16539
16570
  function extend () {
16540
16571
  let
16541
16572
  options, name, src, copy, copyIsArray, clone,
@@ -16550,7 +16581,7 @@
16550
16581
  i = 2;
16551
16582
  }
16552
16583
 
16553
- if (Object(target) !== target && typeof target !== 'function') {
16584
+ if (Object(target) !== target && type(target) !== 'function') {
16554
16585
  target = {};
16555
16586
  }
16556
16587
 
@@ -16569,13 +16600,13 @@
16569
16600
  continue
16570
16601
  }
16571
16602
 
16572
- if (deep && copy && (isPlainObject(copy) === true || (copyIsArray = Array.isArray(copy) === true))) {
16603
+ if (deep && copy && (isPlainObject(copy) || (copyIsArray = type(copy) === 'array'))) {
16573
16604
  if (copyIsArray) {
16574
16605
  copyIsArray = false;
16575
- clone = src && Array.isArray(src) === true ? src : [];
16606
+ clone = src && type(src) === 'array' ? src : [];
16576
16607
  }
16577
16608
  else {
16578
- clone = src && isPlainObject(src) === true ? src : {};
16609
+ clone = src && isPlainObject(src) ? src : {};
16579
16610
  }
16580
16611
 
16581
16612
  target[ name ] = extend(deep, clone, copy);
@@ -16757,17 +16788,17 @@
16757
16788
  const userDef = props.definitions || {};
16758
16789
  const def = props.definitions || props.fonts
16759
16790
  ? extend(
16760
- true,
16761
- {},
16762
- buttonDef.value,
16763
- userDef,
16764
- getFonts(
16765
- defaultFont,
16766
- $q.lang.editor.defaultFont,
16767
- $q.iconSet.editor.font,
16768
- props.fonts
16769
- )
16791
+ true,
16792
+ {},
16793
+ buttonDef.value,
16794
+ userDef,
16795
+ getFonts(
16796
+ defaultFont,
16797
+ $q.lang.editor.defaultFont,
16798
+ $q.iconSet.editor.font,
16799
+ props.fonts
16770
16800
  )
16801
+ )
16771
16802
  : buttonDef.value;
16772
16803
 
16773
16804
  return props.toolbar.map(
@@ -17905,7 +17936,7 @@
17905
17936
  const classes = `q-fab__${ kebab } absolute-full`;
17906
17937
 
17907
17938
  return slotFn === void 0
17908
- ? vue.h(QIcon, { class: classes, name: props[ kebab ] || $q.iconSet.fab[ camel ] })
17939
+ ? vue.h(QIcon, { class: classes, name: props[ camel ] || $q.iconSet.fab[ camel ] })
17909
17940
  : vue.h('div', { class: classes }, slotFn(slotScope.value))
17910
17941
  }
17911
17942
 
@@ -18440,18 +18471,20 @@
18440
18471
  }) {
18441
18472
  const { props, emit, proxy } = vue.getCurrentInstance();
18442
18473
 
18474
+ const dndRef = vue.ref(null);
18475
+
18443
18476
  const extensions = vue.computed(() => (
18444
18477
  props.accept !== void 0
18445
18478
  ? props.accept.split(',').map(ext => {
18446
- ext = ext.trim();
18447
- if (ext === '*') { // support "*"
18448
- return '*/'
18449
- }
18450
- else if (ext.endsWith('/*')) { // support "image/*" or "*/*"
18451
- ext = ext.slice(0, ext.length - 1);
18452
- }
18453
- return ext.toUpperCase()
18454
- })
18479
+ ext = ext.trim();
18480
+ if (ext === '*') { // support "*"
18481
+ return '*/'
18482
+ }
18483
+ else if (ext.endsWith('/*')) { // support "image/*" or "*/*"
18484
+ ext = ext.slice(0, ext.length - 1);
18485
+ }
18486
+ return ext.toUpperCase()
18487
+ })
18455
18488
  : null
18456
18489
  ));
18457
18490
 
@@ -18516,7 +18549,7 @@
18516
18549
  // Cordova/iOS allows selecting multiple files even when the
18517
18550
  // multiple attribute is not specified. We also normalize drag'n'dropped
18518
18551
  // files here:
18519
- if (props.multiple !== true) {
18552
+ if (props.multiple !== true && files.length > 0) {
18520
18553
  files = [ files[ 0 ] ];
18521
18554
  }
18522
18555
 
@@ -18581,7 +18614,7 @@
18581
18614
 
18582
18615
  function onDragleave (e) {
18583
18616
  stopAndPrevent(e);
18584
- dnd.value = false;
18617
+ e.relatedTarget !== dndRef.value && (dnd.value = false);
18585
18618
  }
18586
18619
 
18587
18620
  function onDrop (e) {
@@ -18598,6 +18631,7 @@
18598
18631
  function getDndNode (type) {
18599
18632
  if (dnd.value === true) {
18600
18633
  return vue.h('div', {
18634
+ ref: dndRef,
18601
18635
  class: `q-${ type }__dnd absolute-full`,
18602
18636
  onDragenter: stopAndPreventDrag,
18603
18637
  onDragover: stopAndPreventDrag,
@@ -18717,6 +18751,7 @@
18717
18751
  pickFiles,
18718
18752
  addFiles,
18719
18753
  onDragover,
18754
+ onDragleave,
18720
18755
  processFiles,
18721
18756
  getDndNode,
18722
18757
  maxFilesNumber,
@@ -18996,10 +19031,10 @@
18996
19031
  }, [
18997
19032
  file.__status === 'failed'
18998
19033
  ? vue.h(QIcon, {
18999
- class: 'q-uploader__file-status',
19000
- name: $q.iconSet.type.negative,
19001
- color: 'negative'
19002
- })
19034
+ class: 'q-uploader__file-status',
19035
+ name: $q.iconSet.type.negative,
19036
+ color: 'negative'
19037
+ })
19003
19038
  : null,
19004
19039
 
19005
19040
  vue.h('div', { class: 'q-uploader__file-header-content col' }, [
@@ -19013,11 +19048,11 @@
19013
19048
 
19014
19049
  file.__status === 'uploading'
19015
19050
  ? vue.h(QCircularProgress, {
19016
- value: file.__progress,
19017
- min: 0,
19018
- max: 1,
19019
- indeterminate: file.__progress === 0
19020
- })
19051
+ value: file.__progress,
19052
+ min: 0,
19053
+ max: 1,
19054
+ indeterminate: file.__progress === 0
19055
+ })
19021
19056
  : vue.h(QBtn, {
19022
19057
  round: true,
19023
19058
  dense: true,
@@ -19086,7 +19121,7 @@
19086
19121
  const data = { ref: rootRef, class: classes.value };
19087
19122
 
19088
19123
  if (canAddFiles.value === true) {
19089
- data.onDragover = onDragover;
19124
+ Object.assign(data, { onDragover, onDragleave });
19090
19125
  }
19091
19126
 
19092
19127
  return vue.h('div', data, children)
@@ -19115,7 +19150,7 @@
19115
19150
  ...props
19116
19151
  },
19117
19152
 
19118
- emits: isPlainObject(emits) === true
19153
+ emits: isObject(emits) === true
19119
19154
  ? { ...coreEmitsObject, ...emits }
19120
19155
  : [ ...coreEmits, ...emits ],
19121
19156
 
@@ -19669,7 +19704,7 @@
19669
19704
  if (typeof options.style === 'string') {
19670
19705
  elTo.style.cssText += ' ' + options.style;
19671
19706
  }
19672
- else if (isPlainObject(options.style) === true) {
19707
+ else if (isObject(options.style) === true) {
19673
19708
  for (const prop in options.style) {
19674
19709
  elTo.style[ prop ] = options.style[ prop ];
19675
19710
  }
@@ -20864,14 +20899,6 @@
20864
20899
  }, getControlContainer())
20865
20900
  );
20866
20901
 
20867
- slots.append !== void 0 && node.push(
20868
- vue.h('div', {
20869
- class: 'q-field__append q-field__marginal row no-wrap items-center',
20870
- key: 'append',
20871
- onClick: prevent
20872
- }, slots.append())
20873
- );
20874
-
20875
20902
  hasError.value === true && props.noErrorIcon === false && node.push(
20876
20903
  getInnerAppendNode('error', [
20877
20904
  vue.h(QIcon, { name: $q.iconSet.field.error, color: 'negative' })
@@ -20905,6 +20932,14 @@
20905
20932
  );
20906
20933
  }
20907
20934
 
20935
+ slots.append !== void 0 && node.push(
20936
+ vue.h('div', {
20937
+ class: 'q-field__append q-field__marginal row no-wrap items-center',
20938
+ key: 'append',
20939
+ onClick: prevent
20940
+ }, slots.append())
20941
+ );
20942
+
20908
20943
  state.getInnerAppend !== void 0 && node.push(
20909
20944
  getInnerAppendNode('inner-append', state.getInnerAppend())
20910
20945
  );
@@ -21009,8 +21044,8 @@
21009
21044
 
21010
21045
  hasCounter === true
21011
21046
  ? vue.h('div', {
21012
- class: 'q-field__counter'
21013
- }, slots.counter !== void 0 ? slots.counter() : state.computedCounter.value)
21047
+ class: 'q-field__counter'
21048
+ }, slots.counter !== void 0 ? slots.counter() : state.computedCounter.value)
21014
21049
  : null
21015
21050
  ])
21016
21051
  }
@@ -21050,6 +21085,14 @@
21050
21085
  });
21051
21086
 
21052
21087
  return function renderField () {
21088
+ const labelAttrs = state.getControl === void 0 && slots.control === void 0
21089
+ ? {
21090
+ ...state.splitAttrs.attributes.value,
21091
+ 'data-autofocus': props.autofocus,
21092
+ ...attributes.value
21093
+ }
21094
+ : attributes.value;
21095
+
21053
21096
  return vue.h('label', {
21054
21097
  ref: state.rootRef,
21055
21098
  class: [
@@ -21057,13 +21100,13 @@
21057
21100
  attrs.class
21058
21101
  ],
21059
21102
  style: attrs.style,
21060
- ...attributes.value
21103
+ ...labelAttrs
21061
21104
  }, [
21062
21105
  slots.before !== void 0
21063
21106
  ? vue.h('div', {
21064
- class: 'q-field__before q-field__marginal row no-wrap items-center',
21065
- onClick: prevent
21066
- }, slots.before())
21107
+ class: 'q-field__before q-field__marginal row no-wrap items-center',
21108
+ onClick: prevent
21109
+ }, slots.before())
21067
21110
  : null,
21068
21111
 
21069
21112
  vue.h('div', {
@@ -21083,9 +21126,9 @@
21083
21126
 
21084
21127
  slots.after !== void 0
21085
21128
  ? vue.h('div', {
21086
- class: 'q-field__after q-field__marginal row no-wrap items-center',
21087
- onClick: prevent
21088
- }, slots.after())
21129
+ class: 'q-field__after q-field__marginal row no-wrap items-center',
21130
+ onClick: prevent
21131
+ }, slots.after())
21089
21132
  : null
21090
21133
  ])
21091
21134
  }
@@ -21139,12 +21182,12 @@
21139
21182
 
21140
21183
  return typeGuard === true
21141
21184
  ? vue.computed(() => {
21142
- if (props.type !== 'file') {
21143
- return
21144
- }
21185
+ if (props.type !== 'file') {
21186
+ return
21187
+ }
21145
21188
 
21146
- return getFormDomProps()
21147
- })
21189
+ return getFormDomProps()
21190
+ })
21148
21191
  : vue.computed(getFormDomProps)
21149
21192
  }
21150
21193
 
@@ -21193,6 +21236,7 @@
21193
21236
  const {
21194
21237
  pickFiles,
21195
21238
  onDragover,
21239
+ onDragleave,
21196
21240
  processFiles,
21197
21241
  getDndNode
21198
21242
  } = useFile({ editable: state.editable, dnd, getFileInput, addFilesToQueue });
@@ -21398,7 +21442,7 @@
21398
21442
  };
21399
21443
 
21400
21444
  if (state.editable.value === true) {
21401
- Object.assign(data, { onDragover, onKeydown, onKeyup });
21445
+ Object.assign(data, { onDragover, onDragleave, onKeydown, onKeyup });
21402
21446
  }
21403
21447
 
21404
21448
  return vue.h('div', data, [ getInput() ].concat(getSelection()))
@@ -22411,7 +22455,9 @@
22411
22455
  isWorking.value = false;
22412
22456
  isFetching.value = false;
22413
22457
  localScrollTarget.removeEventListener('scroll', poll, passive$3);
22414
- poll !== void 0 && poll.cancel();
22458
+ if (poll !== void 0 && poll.cancel !== void 0) {
22459
+ poll.cancel();
22460
+ }
22415
22461
  }
22416
22462
  }
22417
22463
 
@@ -22556,7 +22602,7 @@
22556
22602
 
22557
22603
  const labelClass = vue.computed(() =>
22558
22604
  'q-inner-loading__label'
22559
- + (props.labelClass !== void 0 ? ` ${ props.labelClass}` : '')
22605
+ + (props.labelClass !== void 0 ? ` ${ props.labelClass }` : '')
22560
22606
  );
22561
22607
 
22562
22608
  function getInner () {
@@ -22582,12 +22628,12 @@
22582
22628
  function getContent () {
22583
22629
  return props.showing === true
22584
22630
  ? vue.h(
22585
- 'div',
22586
- { class: classes.value, style: transitionStyle.value },
22587
- slots.default !== void 0
22588
- ? slots.default()
22589
- : getInner()
22590
- )
22631
+ 'div',
22632
+ { class: classes.value, style: transitionStyle.value },
22633
+ slots.default !== void 0
22634
+ ? slots.default()
22635
+ : getInner()
22636
+ )
22591
22637
  : null
22592
22638
  }
22593
22639
 
@@ -23293,7 +23339,10 @@
23293
23339
  if (hasMask.value === true) {
23294
23340
  if (stopValueWatcher === true) {
23295
23341
  stopValueWatcher = false;
23296
- return
23342
+
23343
+ if (String(v) === emitCachedValue) {
23344
+ return
23345
+ }
23297
23346
  }
23298
23347
 
23299
23348
  updateMaskValue(v);
@@ -23964,11 +24013,14 @@
23964
24013
  angle = centerPosition.left < pos.left ? angle + 90 : 270 - angle;
23965
24014
  }
23966
24015
 
23967
- if (props.angle) {
24016
+ if ($q.lang.rtl === true) {
24017
+ angle = normalizeToInterval(-angle - props.angle, 0, 360);
24018
+ }
24019
+ else if (props.angle) {
23968
24020
  angle = normalizeToInterval(angle - props.angle, 0, 360);
23969
24021
  }
23970
24022
 
23971
- if ($q.lang.rtl === true) {
24023
+ if (props.reverse === true) {
23972
24024
  angle = 360 - angle;
23973
24025
  }
23974
24026
 
@@ -25154,10 +25206,10 @@
25154
25206
  function getContent () {
25155
25207
  return showing.value === true
25156
25208
  ? vue.h('div', {
25157
- ref: rootRef,
25158
- class: 'q-page-scroller',
25159
- onClick
25160
- }, getStickyContent(slots))
25209
+ ref: rootRef,
25210
+ class: 'q-page-scroller',
25211
+ onClick
25212
+ }, getStickyContent(slots))
25161
25213
  : null
25162
25214
  }
25163
25215
 
@@ -26166,7 +26218,7 @@
26166
26218
  }
26167
26219
 
26168
26220
  if (event.isFirst === true) {
26169
- if (getVerticalScrollPosition(localScrollTarget) !== 0 || event.direction !== "down") {
26221
+ if (getVerticalScrollPosition(localScrollTarget) !== 0 || event.direction !== 'down') {
26170
26222
  if (pulling.value === true) {
26171
26223
  pulling.value = false;
26172
26224
  state.value = 'pull';
@@ -26279,10 +26331,10 @@
26279
26331
  }, [
26280
26332
  state.value !== 'refreshing'
26281
26333
  ? vue.h(QIcon, {
26282
- name: props.icon || $q.iconSet.pullToRefresh.icon,
26283
- color: props.color,
26284
- size: '32px'
26285
- })
26334
+ name: props.icon || $q.iconSet.pullToRefresh.icon,
26335
+ color: props.color,
26336
+ size: '32px'
26337
+ })
26286
26338
  : vue.h(QSpinner, {
26287
26339
  size: '24px',
26288
26340
  color: props.color
@@ -28008,17 +28060,17 @@
28008
28060
  return [
28009
28061
  tag === 'tbody'
28010
28062
  ? vue.h(tag, {
28011
- class: 'q-virtual-scroll__padding',
28012
- key: 'before',
28013
- ref: beforeRef
28014
- }, [
28015
- vue.h('tr', [
28016
- vue.h('td', {
28017
- style: { [ paddingSize ]: `${ virtualScrollPaddingBefore.value }px`, ...style },
28018
- colspan: colspanAttr.value
28019
- })
28020
- ])
28063
+ class: 'q-virtual-scroll__padding',
28064
+ key: 'before',
28065
+ ref: beforeRef
28066
+ }, [
28067
+ vue.h('tr', [
28068
+ vue.h('td', {
28069
+ style: { [ paddingSize ]: `${ virtualScrollPaddingBefore.value }px`, ...style },
28070
+ colspan: colspanAttr.value
28071
+ })
28021
28072
  ])
28073
+ ])
28022
28074
  : vue.h(tag, {
28023
28075
  class: 'q-virtual-scroll__padding',
28024
28076
  key: 'before',
@@ -28036,17 +28088,17 @@
28036
28088
 
28037
28089
  tag === 'tbody'
28038
28090
  ? vue.h(tag, {
28039
- class: 'q-virtual-scroll__padding',
28040
- key: 'after',
28041
- ref: afterRef
28042
- }, [
28043
- vue.h('tr', [
28044
- vue.h('td', {
28045
- style: { [ paddingSize ]: `${ virtualScrollPaddingAfter.value }px`, ...style },
28046
- colspan: colspanAttr.value
28047
- })
28048
- ])
28091
+ class: 'q-virtual-scroll__padding',
28092
+ key: 'after',
28093
+ ref: afterRef
28094
+ }, [
28095
+ vue.h('tr', [
28096
+ vue.h('td', {
28097
+ style: { [ paddingSize ]: `${ virtualScrollPaddingAfter.value }px`, ...style },
28098
+ colspan: colspanAttr.value
28099
+ })
28049
28100
  ])
28101
+ ])
28050
28102
  : vue.h(tag, {
28051
28103
  class: 'q-virtual-scroll__padding',
28052
28104
  key: 'after',
@@ -28280,6 +28332,7 @@
28280
28332
  localResetVirtualScroll,
28281
28333
  padVirtualScroll,
28282
28334
  onVirtualScrollEvt,
28335
+ reset,
28283
28336
  scrollTo,
28284
28337
  setVirtualScrollSize
28285
28338
  } = useVirtualScroll({
@@ -28537,6 +28590,8 @@
28537
28590
 
28538
28591
  vue.watch(menu, updateMenu);
28539
28592
 
28593
+ vue.watch(virtualScrollLength, rerenderMenu);
28594
+
28540
28595
  function getEmittingOptionValue (opt) {
28541
28596
  return props.emitValue === true
28542
28597
  ? getOptionValue.value(opt)
@@ -28707,7 +28762,7 @@
28707
28762
 
28708
28763
  return typeof val === 'function'
28709
28764
  ? val
28710
- : opt => (isPlainObject(opt) === true && val in opt ? opt[ val ] : opt)
28765
+ : opt => (opt !== null && typeof opt === 'object' && val in opt ? opt[ val ] : opt)
28711
28766
  }
28712
28767
 
28713
28768
  function isOptionSelected (opt) {
@@ -29080,6 +29135,8 @@
29080
29135
  }
29081
29136
 
29082
29137
  function getInput (fromDialog, isTarget) {
29138
+ const attrs = isTarget === true ? { ...comboboxAttrs.value, ...state.splitAttrs.attributes.value } : void 0;
29139
+
29083
29140
  const data = {
29084
29141
  ref: isTarget === true ? targetRef : void 0,
29085
29142
  key: 'i_t',
@@ -29088,8 +29145,7 @@
29088
29145
  value: inputValue.value !== void 0 ? inputValue.value : '',
29089
29146
  // required for Android in order to show ENTER key when in form
29090
29147
  type: 'search',
29091
- ...comboboxAttrs.value,
29092
- ...state.splitAttrs.attributes.value,
29148
+ ...attrs,
29093
29149
  id: isTarget === true ? state.targetUid.value : void 0,
29094
29150
  maxlength: props.maxlength,
29095
29151
  autocomplete: props.autocomplete,
@@ -29443,6 +29499,18 @@
29443
29499
  setOptionIndex(optionIndex);
29444
29500
  }
29445
29501
 
29502
+ function rerenderMenu () {
29503
+ if (menu.value === true && state.innerLoading.value === false) {
29504
+ reset();
29505
+
29506
+ vue.nextTick(() => {
29507
+ if (menu.value === true && state.innerLoading.value === false) {
29508
+ updateMenu(true);
29509
+ }
29510
+ });
29511
+ }
29512
+ }
29513
+
29446
29514
  function updateMenuPosition () {
29447
29515
  if (dialog.value === false && menuRef.value !== null) {
29448
29516
  menuRef.value.updatePosition();
@@ -29569,13 +29637,16 @@
29569
29637
  }
29570
29638
  // there can be only one (when dialog is opened the control in dialog should be target)
29571
29639
  else if (state.editable.value === true) {
29640
+ const attrs = isTarget === true ? comboboxAttrs.value : void 0;
29641
+
29572
29642
  child.push(
29573
- vue.h('div', {
29643
+ vue.h('input', {
29574
29644
  ref: isTarget === true ? targetRef : void 0,
29575
29645
  key: 'd_t',
29576
29646
  class: 'q-select__focus-target',
29577
29647
  id: isTarget === true ? state.targetUid.value : void 0,
29578
- ...comboboxAttrs.value,
29648
+ readonly: true,
29649
+ ...attrs,
29579
29650
  onKeydown: onTargetKeydown,
29580
29651
  onKeyup: onTargetKeyup,
29581
29652
  onKeypress: onTargetKeypress
@@ -29605,9 +29676,11 @@
29605
29676
  );
29606
29677
  }
29607
29678
 
29679
+ const attrs = props.useInput === true || isTarget !== true ? void 0 : state.splitAttrs.attributes.value;
29680
+
29608
29681
  return vue.h('div', {
29609
29682
  class: 'q-field__native row items-center',
29610
- ...state.splitAttrs.attributes.value
29683
+ ...attrs
29611
29684
  }, child)
29612
29685
  },
29613
29686
 
@@ -32325,14 +32398,14 @@
32325
32398
  || $stepper.value.vertical !== true
32326
32399
  ? {}
32327
32400
  : {
32328
- onScroll (e) {
32329
- const { target } = e;
32330
- if (target.scrollTop > 0) {
32331
- target.scrollTop = 0;
32401
+ onScroll (e) {
32402
+ const { target } = e;
32403
+ if (target.scrollTop > 0) {
32404
+ target.scrollTop = 0;
32405
+ }
32406
+ attrs.onScroll !== void 0 && attrs.onScroll(e);
32332
32407
  }
32333
- attrs.onScroll !== void 0 && attrs.onScroll(e);
32334
32408
  }
32335
- }
32336
32409
  ));
32337
32410
 
32338
32411
  const contentKey = vue.computed(() => (
@@ -32726,9 +32799,9 @@
32726
32799
 
32727
32800
  return props.type === '__qtable'
32728
32801
  ? getTableMiddle(
32729
- { ref: rootRef, class: 'q-table__middle ' + classes.value },
32730
- __getVirtualChildren()
32731
- )
32802
+ { ref: rootRef, class: 'q-table__middle ' + classes.value },
32803
+ __getVirtualChildren()
32804
+ )
32732
32805
  : vue.h(comps[ props.type ], {
32733
32806
  ...attrs,
32734
32807
  ref: rootRef,
@@ -32813,7 +32886,7 @@
32813
32886
  function sort (col /* String(col name) or Object(col definition) */) {
32814
32887
  let sortOrder = props.columnSortOrder;
32815
32888
 
32816
- if (isPlainObject(col) === true) {
32889
+ if (isObject(col) === true) {
32817
32890
  if (col.sortOrder) {
32818
32891
  sortOrder = col.sortOrder;
32819
32892
  }
@@ -33269,12 +33342,12 @@
33269
33342
 
33270
33343
  return row !== void 0
33271
33344
  ? Object.keys(row).map(name => ({
33272
- name,
33273
- label: name.toUpperCase(),
33274
- field: name,
33275
- align: isNumber(row[ name ]) ? 'right' : 'left',
33276
- sortable: true
33277
- }))
33345
+ name,
33346
+ label: name.toUpperCase(),
33347
+ field: name,
33348
+ align: isNumber(row[ name ]) ? 'right' : 'left',
33349
+ sortable: true
33350
+ }))
33278
33351
  : []
33279
33352
  });
33280
33353
 
@@ -37548,15 +37621,15 @@
37548
37621
  || client.is.webkit === true || client.is.vivaldi === true
37549
37622
  )
37550
37623
  ? hexColor => {
37551
- const val = hexColor || getCssVar('primary');
37624
+ const val = hexColor || getCssVar('primary');
37552
37625
 
37553
- if (client.is.nativeMobile === true && window.StatusBar) {
37554
- window.StatusBar.backgroundColorByHexString(val);
37555
- }
37556
- else {
37557
- setColor(val);
37558
- }
37626
+ if (client.is.nativeMobile === true && window.StatusBar) {
37627
+ window.StatusBar.backgroundColorByHexString(val);
37628
+ }
37629
+ else {
37630
+ setColor(val);
37559
37631
  }
37632
+ }
37560
37633
  : noop,
37561
37634
 
37562
37635
  install ({ $q }) {
@@ -37763,9 +37836,9 @@
37763
37836
 
37764
37837
  return action.label === void 0
37765
37838
  ? vue.h(QSeparator, {
37766
- class: 'col-all',
37767
- dark: isDark.value
37768
- })
37839
+ class: 'col-all',
37840
+ dark: isDark.value
37841
+ })
37769
37842
  : vue.h('div', {
37770
37843
  class: [
37771
37844
  'q-bottom-sheet__item q-hoverable q-focusable cursor-pointer relative-position',
@@ -37782,9 +37855,9 @@
37782
37855
  : (
37783
37856
  img
37784
37857
  ? vue.h('img', {
37785
- class: action.avatar ? 'q-bottom-sheet__avatar' : '',
37786
- src: img
37787
- })
37858
+ class: action.avatar ? 'q-bottom-sheet__avatar' : '',
37859
+ src: img
37860
+ })
37788
37861
  : vue.h('div', { class: 'q-bottom-sheet__empty-icon' })
37789
37862
  ),
37790
37863
 
@@ -37816,9 +37889,9 @@
37816
37889
  : (
37817
37890
  img
37818
37891
  ? vue.h('img', {
37819
- class: action.avatar ? 'q-bottom-sheet__avatar' : '',
37820
- src: img
37821
- })
37892
+ class: action.avatar ? 'q-bottom-sheet__avatar' : '',
37893
+ src: img
37894
+ })
37822
37895
  : null
37823
37896
  )
37824
37897
  )
@@ -37847,8 +37920,8 @@
37847
37920
  child.push(
37848
37921
  props.grid === true
37849
37922
  ? vue.h('div', {
37850
- class: 'row items-stretch justify-start'
37851
- }, getGrid())
37923
+ class: 'row items-stretch justify-start'
37924
+ }, getGrid())
37852
37925
  : vue.h('div', getList())
37853
37926
  );
37854
37927
 
@@ -38064,7 +38137,11 @@
38064
38137
  string = decode$1(string.replace(/\+/g, ' '));
38065
38138
 
38066
38139
  try {
38067
- string = JSON.parse(string);
38140
+ const parsed = JSON.parse(string);
38141
+
38142
+ if (parsed === Object(parsed) || Array.isArray(parsed) === true) {
38143
+ string = parsed;
38144
+ }
38068
38145
  }
38069
38146
  catch (e) {}
38070
38147
 
@@ -38291,7 +38368,7 @@
38291
38368
  props.progress === false
38292
38369
  ? null
38293
38370
  : (
38294
- isPlainObject(props.progress) === true
38371
+ isObject(props.progress) === true
38295
38372
  ? {
38296
38373
  component: props.progress.spinner || QSpinner,
38297
38374
  props: { color: props.progress.color || vmColor.value }
@@ -38320,7 +38397,7 @@
38320
38397
  });
38321
38398
 
38322
38399
  const okLabel = vue.computed(() => (
38323
- isPlainObject(props.ok) === true
38400
+ isObject(props.ok) === true
38324
38401
  ? $q.lang.label.ok
38325
38402
  : (
38326
38403
  props.ok === true
@@ -38330,7 +38407,7 @@
38330
38407
  ));
38331
38408
 
38332
38409
  const cancelLabel = vue.computed(() => (
38333
- isPlainObject(props.cancel) === true
38410
+ isObject(props.cancel) === true
38334
38411
  ? $q.lang.label.cancel
38335
38412
  : (
38336
38413
  props.cancel === true
@@ -38356,7 +38433,7 @@
38356
38433
  label: okLabel.value,
38357
38434
  ripple: false,
38358
38435
  disable: okDisabled.value,
38359
- ...(isPlainObject(props.ok) === true ? props.ok : { flat: true }),
38436
+ ...(isObject(props.ok) === true ? props.ok : { flat: true }),
38360
38437
  'data-autofocus': (props.focus === 'ok' && hasForm.value !== true) || void 0,
38361
38438
  onClick: onOk
38362
38439
  }));
@@ -38365,7 +38442,7 @@
38365
38442
  color: vmColor.value,
38366
38443
  label: cancelLabel.value,
38367
38444
  ripple: false,
38368
- ...(isPlainObject(props.cancel) === true ? props.cancel : { flat: true }),
38445
+ ...(isObject(props.cancel) === true ? props.cancel : { flat: true }),
38369
38446
  'data-autofocus': (props.focus === 'cancel' && hasForm.value !== true) || void 0,
38370
38447
  onClick: onCancel
38371
38448
  }));
@@ -38569,6 +38646,14 @@
38569
38646
  : {}
38570
38647
  );
38571
38648
 
38649
+ function onStart () {
38650
+ Plugin$3.isActive = true;
38651
+ }
38652
+
38653
+ function onStop () {
38654
+ Plugin$3.isActive = false;
38655
+ }
38656
+
38572
38657
  const el = createGlobalNode('q-loading-bar');
38573
38658
 
38574
38659
  createChildApp({
@@ -38577,23 +38662,21 @@
38577
38662
  // hide App from Vue devtools
38578
38663
  devtools: { hide: true },
38579
38664
 
38580
- setup: () => () => vue.h(QAjaxBar, { ...props.value, ref: barRef })
38665
+ setup: () => () => vue.h(QAjaxBar, { ...props.value, onStart, onStop, ref: barRef })
38581
38666
  }, parentApp).mount(el);
38582
38667
 
38583
38668
  Object.assign(this, {
38584
38669
  start (speed) {
38585
38670
  barRef.value.start(speed);
38586
- Plugin$3.isActive = true;
38587
38671
  },
38588
38672
  stop () {
38589
- const sessions = barRef.value.stop();
38590
- Plugin$3.isActive = sessions > 0;
38673
+ barRef.value.stop();
38591
38674
  },
38592
38675
  increment () {
38593
38676
  barRef.value.increment.apply(null, arguments);
38594
38677
  },
38595
38678
  setDefaults (opts) {
38596
- if (isPlainObject(opts) === true) {
38679
+ if (isObject(opts) === true) {
38597
38680
  Object.assign(props.value, opts);
38598
38681
  }
38599
38682
  }
@@ -38628,7 +38711,7 @@
38628
38711
  }, {
38629
38712
  show (opts) {
38630
38713
 
38631
- props = isPlainObject(opts) === true && opts.ignoreDefaults === true
38714
+ props = isObject(opts) === true && opts.ignoreDefaults === true
38632
38715
  ? { ...originalDefaults, ...opts }
38633
38716
  : { ...defaults$1, ...opts };
38634
38717
 
@@ -38729,7 +38812,7 @@
38729
38812
 
38730
38813
  setDefaults (opts) {
38731
38814
  {
38732
- isPlainObject(opts) === true && Object.assign(defaults$1, opts);
38815
+ isObject(opts) === true && Object.assign(defaults$1, opts);
38733
38816
  }
38734
38817
  },
38735
38818
 
@@ -38804,7 +38887,7 @@
38804
38887
  Object.assign(notif, defaults);
38805
38888
  }
38806
38889
 
38807
- if (isPlainObject(config) === false) {
38890
+ if (isObject(config) === false) {
38808
38891
  if (notif.type) {
38809
38892
  Object.assign(notif, notifTypes[ notif.type ]);
38810
38893
  }
@@ -39222,12 +39305,12 @@
39222
39305
  var Notify = {
39223
39306
  setDefaults (opts) {
39224
39307
  {
39225
- isPlainObject(opts) === true && Object.assign(defaults, opts);
39308
+ isObject(opts) === true && Object.assign(defaults, opts);
39226
39309
  }
39227
39310
  },
39228
39311
 
39229
39312
  registerType (typeName, typeOpts) {
39230
- if (isPlainObject(typeOpts) === true) {
39313
+ if (isObject(typeOpts) === true) {
39231
39314
  notifTypes[ typeName ] = typeOpts;
39232
39315
  }
39233
39316
  },
@@ -39531,7 +39614,7 @@
39531
39614
  });
39532
39615
 
39533
39616
  var index_umd = {
39534
- version: '2.5.5',
39617
+ version: '2.6.2',
39535
39618
  install (app, opts) {
39536
39619
  installQuasar(app, {
39537
39620
  components,