quasar 2.5.3 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) 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 +4 -4
  8. package/dist/api/QBtnDropdown.json +17 -17
  9. package/dist/api/QCarousel.json +4 -4
  10. package/dist/api/QCheckbox.json +1 -1
  11. package/dist/api/QChip.json +5 -5
  12. package/dist/api/QDialog.json +13 -13
  13. package/dist/api/QDrawer.json +16 -16
  14. package/dist/api/QExpansionItem.json +15 -15
  15. package/dist/api/QFab.json +15 -15
  16. package/dist/api/QFabAction.json +3 -3
  17. package/dist/api/QField.json +2 -2
  18. package/dist/api/QFile.json +1 -1
  19. package/dist/api/QForm.json +12 -3
  20. package/dist/api/QIcon.json +4 -2
  21. package/dist/api/QInput.json +2 -2
  22. package/dist/api/QKnob.json +23 -0
  23. package/dist/api/QMenu.json +13 -13
  24. package/dist/api/QPagination.json +4 -4
  25. package/dist/api/QPopupEdit.json +6 -6
  26. package/dist/api/QPopupProxy.json +13 -13
  27. package/dist/api/QRadio.json +1 -1
  28. package/dist/api/QRange.json +1 -1
  29. package/dist/api/QRouteTab.json +2 -2
  30. package/dist/api/QSelect.json +18 -5
  31. package/dist/api/QSlider.json +1 -1
  32. package/dist/api/QStep.json +4 -4
  33. package/dist/api/QStepper.json +4 -4
  34. package/dist/api/QTab.json +1 -1
  35. package/dist/api/QTable.json +6 -6
  36. package/dist/api/QTimelineEntry.json +1 -1
  37. package/dist/api/QToggle.json +2 -2
  38. package/dist/api/QTooltip.json +13 -13
  39. package/dist/api/QTree.json +1 -1
  40. package/dist/api/QUploader.json +1 -1
  41. package/dist/api/TouchHold.json +1 -1
  42. package/dist/api/TouchPan.json +1 -1
  43. package/dist/api/TouchRepeat.json +1 -1
  44. package/dist/api/TouchSwipe.json +1 -1
  45. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  46. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  47. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  48. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  49. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +6 -0
  50. package/dist/icon-set/fontawesome-v6.umd.prod.js +6 -0
  51. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  52. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  53. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  54. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  55. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  56. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  57. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  58. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  59. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  60. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  61. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +2 -2
  62. package/dist/icon-set/svg-eva-icons.umd.prod.js +2 -2
  63. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +2 -2
  64. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +6 -0
  65. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  66. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  67. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +2 -2
  68. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  69. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  70. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  71. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  72. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  73. package/dist/icon-set/svg-mdi-v4.umd.prod.js +1 -1
  74. package/dist/icon-set/svg-mdi-v5.umd.prod.js +1 -1
  75. package/dist/icon-set/svg-mdi-v6.umd.prod.js +2 -2
  76. package/dist/icon-set/svg-themify.umd.prod.js +2 -2
  77. package/dist/icon-set/themify.umd.prod.js +1 -1
  78. package/dist/lang/ar.umd.prod.js +1 -1
  79. package/dist/lang/az-Latn.umd.prod.js +1 -1
  80. package/dist/lang/bg.umd.prod.js +1 -1
  81. package/dist/lang/bn.umd.prod.js +1 -1
  82. package/dist/lang/ca.umd.prod.js +1 -1
  83. package/dist/lang/cs.umd.prod.js +1 -1
  84. package/dist/lang/da.umd.prod.js +1 -1
  85. package/dist/lang/de.umd.prod.js +1 -1
  86. package/dist/lang/el.umd.prod.js +1 -1
  87. package/dist/lang/en-GB.umd.prod.js +1 -1
  88. package/dist/lang/en-US.umd.prod.js +1 -1
  89. package/dist/lang/eo.umd.prod.js +1 -1
  90. package/dist/lang/es.umd.prod.js +1 -1
  91. package/dist/lang/et.umd.prod.js +1 -1
  92. package/dist/lang/eu.umd.prod.js +6 -0
  93. package/dist/lang/fa-IR.umd.prod.js +1 -1
  94. package/dist/lang/fa.umd.prod.js +1 -1
  95. package/dist/lang/fi.umd.prod.js +1 -1
  96. package/dist/lang/fr.umd.prod.js +1 -1
  97. package/dist/lang/gn.umd.prod.js +1 -1
  98. package/dist/lang/he.umd.prod.js +1 -1
  99. package/dist/lang/hr.umd.prod.js +1 -1
  100. package/dist/lang/hu.umd.prod.js +1 -1
  101. package/dist/lang/id.umd.prod.js +1 -1
  102. package/dist/lang/is.umd.prod.js +1 -1
  103. package/dist/lang/it.umd.prod.js +1 -1
  104. package/dist/lang/ja.umd.prod.js +1 -1
  105. package/dist/lang/km.umd.prod.js +1 -1
  106. package/dist/lang/ko-KR.umd.prod.js +1 -1
  107. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  108. package/dist/lang/kz.umd.prod.js +6 -0
  109. package/dist/lang/lt.umd.prod.js +1 -1
  110. package/dist/lang/lu.umd.prod.js +1 -1
  111. package/dist/lang/lv.umd.prod.js +1 -1
  112. package/dist/lang/ml.umd.prod.js +1 -1
  113. package/dist/lang/ms.umd.prod.js +1 -1
  114. package/dist/lang/my.umd.prod.js +1 -1
  115. package/dist/lang/nb-NO.umd.prod.js +1 -1
  116. package/dist/lang/nl.umd.prod.js +1 -1
  117. package/dist/lang/pl.umd.prod.js +1 -1
  118. package/dist/lang/pt-BR.umd.prod.js +1 -1
  119. package/dist/lang/pt.umd.prod.js +1 -1
  120. package/dist/lang/ro.umd.prod.js +1 -1
  121. package/dist/lang/ru.umd.prod.js +1 -1
  122. package/dist/lang/sk.umd.prod.js +1 -1
  123. package/dist/lang/sl.umd.prod.js +1 -1
  124. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  125. package/dist/lang/sr.umd.prod.js +1 -1
  126. package/dist/lang/sv.umd.prod.js +1 -1
  127. package/dist/lang/ta.umd.prod.js +1 -1
  128. package/dist/lang/th.umd.prod.js +1 -1
  129. package/dist/lang/tr.umd.prod.js +1 -1
  130. package/dist/lang/ug.umd.prod.js +2 -2
  131. package/dist/lang/uk.umd.prod.js +1 -1
  132. package/dist/lang/vi.umd.prod.js +1 -1
  133. package/dist/lang/zh-CN.umd.prod.js +1 -1
  134. package/dist/lang/zh-TW.umd.prod.js +1 -1
  135. package/dist/quasar.cjs.prod.js +2 -2
  136. package/dist/quasar.css +4 -6
  137. package/dist/quasar.esm.prod.js +2 -2
  138. package/dist/quasar.prod.css +1 -1
  139. package/dist/quasar.rtl.css +4 -6
  140. package/dist/quasar.rtl.prod.css +1 -1
  141. package/dist/quasar.sass +3 -1
  142. package/dist/quasar.umd.js +560 -505
  143. package/dist/quasar.umd.prod.js +2 -2
  144. package/dist/types/extras/icon-set.d.ts +3 -0
  145. package/dist/types/globals.d.ts +2 -2
  146. package/dist/types/index.d.ts +254 -136
  147. package/dist/vetur/quasar-attributes.json +50 -38
  148. package/dist/vetur/quasar-tags.json +3 -0
  149. package/dist/web-types/web-types.json +129 -93
  150. package/icon-set/fontawesome-v6-pro.js +128 -0
  151. package/icon-set/fontawesome-v6.js +128 -0
  152. package/icon-set/svg-fontawesome-v6.js +198 -0
  153. package/lang/eu.js +91 -0
  154. package/lang/index.json +8 -0
  155. package/lang/kz.js +95 -0
  156. package/lang/ug.js +49 -50
  157. package/package.json +1 -1
  158. package/src/api-file-example.json +2 -2
  159. package/src/api.extends.json +22 -33
  160. package/src/components/btn/QBtn.js +16 -14
  161. package/src/components/btn/QBtn.json +3 -6
  162. package/src/components/btn/use-btn.js +7 -7
  163. package/src/components/carousel/QCarousel.json +2 -4
  164. package/src/components/checkbox/use-checkbox.json +2 -4
  165. package/src/components/chip/QChip.json +1 -3
  166. package/src/components/date/QDate.js +20 -19
  167. package/src/components/date/use-datetime.js +3 -1
  168. package/src/components/dialog/QDialog.js +11 -11
  169. package/src/components/dialog-bottom-sheet/BottomSheet.js +11 -11
  170. package/src/components/dialog-plugin/DialogPlugin.js +9 -8
  171. package/src/components/editor/QEditor.js +10 -10
  172. package/src/components/editor/editor-utils.js +2 -2
  173. package/src/components/fab/QFabAction.json +1 -3
  174. package/src/components/field/QField.json +2 -6
  175. package/src/components/file/QFile.js +2 -1
  176. package/src/components/form/QForm.json +10 -7
  177. package/src/components/icon/QIcon.js +6 -2
  178. package/src/components/icon/QIcon.json +1 -3
  179. package/src/components/infinite-scroll/QInfiniteScroll.js +3 -1
  180. package/src/components/inner-loading/QInnerLoading.js +7 -7
  181. package/src/components/input/QInput.js +4 -1
  182. package/src/components/input/QInput.json +2 -6
  183. package/src/components/input/use-mask.js +2 -2
  184. package/src/components/knob/QKnob.js +51 -42
  185. package/src/components/knob/QKnob.json +22 -0
  186. package/src/components/linear-progress/QLinearProgress.sass +1 -0
  187. package/src/components/menu/QMenu.js +13 -13
  188. package/src/components/page-scroller/QPageScroller.js +4 -4
  189. package/src/components/pull-to-refresh/QPullToRefresh.js +5 -5
  190. package/src/components/radio/QRadio.json +2 -4
  191. package/src/components/select/QSelect.js +14 -7
  192. package/src/components/select/QSelect.json +14 -8
  193. package/src/components/slide-transition/QSlideTransition.js +4 -4
  194. package/src/components/slider/use-slider.js +4 -4
  195. package/src/components/slider/use-slider.json +1 -1
  196. package/src/components/stepper/QStep.js +6 -6
  197. package/src/components/stepper/QStep.json +3 -0
  198. package/src/components/stepper/QStepper.json +3 -0
  199. package/src/components/stepper/QStepper.sass +1 -0
  200. package/src/components/stepper/StepHeader.js +23 -8
  201. package/src/components/table/QTable.json +5 -13
  202. package/src/components/table/table-column-selection.js +6 -6
  203. package/src/components/table/table-sort.js +2 -2
  204. package/src/components/tabs/QRouteTab.json +2 -3
  205. package/src/components/tabs/QTabs.js +4 -4
  206. package/src/components/tabs/use-tab.js +11 -8
  207. package/src/components/time/QTime.js +5 -5
  208. package/src/components/tooltip/QTooltip.js +12 -12
  209. package/src/components/uploader/uploader-core.js +11 -10
  210. package/src/components/virtual-scroll/QVirtualScroll.js +3 -3
  211. package/src/components/virtual-scroll/use-virtual-scroll.js +20 -20
  212. package/src/composables/private/use-field.js +25 -17
  213. package/src/composables/private/use-file-dom-props.js +5 -5
  214. package/src/composables/private/use-file.js +15 -12
  215. package/src/composables/private/use-file.json +1 -3
  216. package/src/composables/private/use-router-link.js +3 -3
  217. package/src/directives/Morph.js +12 -3
  218. package/src/directives/TouchHold.json +2 -3
  219. package/src/directives/TouchPan.json +2 -3
  220. package/src/directives/TouchRepeat.json +2 -3
  221. package/src/directives/TouchSwipe.json +2 -3
  222. package/src/install-quasar.js +37 -36
  223. package/src/plugins/AddressbarColor.js +7 -7
  224. package/src/plugins/Cookies.js +5 -1
  225. package/src/plugins/Dialog.json +3 -2
  226. package/src/plugins/Loading.js +3 -2
  227. package/src/plugins/LoadingBar.js +12 -5
  228. package/src/plugins/Notify.js +11 -4
  229. package/src/plugins/Notify.json +102 -2
  230. package/src/utils/create-meta-mixin.js +4 -4
  231. package/src/utils/create-uploader-component.js +2 -1
  232. package/src/utils/event.js +3 -3
  233. package/src/utils/extend.js +6 -34
  234. package/src/utils/morph.js +19 -17
  235. package/src/utils/private/is.js +3 -14
  236. package/src/utils/private/noop-ssr-directive-transform.js +1 -1
  237. package/src/utils/private/web-storage.js +3 -2
  238. package/wrappers/index.js +33 -5
  239. package/wrappers/index.mjs +63 -0
  240. package/dist/ssr-directives/Morph.js +0 -55
  241. package/dist/ssr-directives/index.js +0 -14
  242. package/src/directives/Morph.ssr.js +0 -45
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.5.3
2
+ * Quasar Framework v2.6.0
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.3' };
1606
+ const $q = { version: '2.6.0' };
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
  });
@@ -2704,7 +2848,7 @@
2704
2848
  prevent(e);
2705
2849
 
2706
2850
  return proxy.$router[ props.replace === true ? 'replace' : 'push' ](props.to)
2707
- .catch(() => {})
2851
+ .catch(err => err)
2708
2852
  }
2709
2853
 
2710
2854
  return {
@@ -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
 
@@ -9911,9 +9927,12 @@
9911
9927
  $tabs.avoidRouteWatcher = false;
9912
9928
  }
9913
9929
  else {
9914
- res.then(() => {
9930
+ res.then(err => {
9915
9931
  $tabs.avoidRouteWatcher = false;
9916
- $tabs.updateModel({ name: props.name, fromRoute: true });
9932
+
9933
+ if (err === void 0) {
9934
+ $tabs.updateModel({ name: props.name, fromRoute: true });
9935
+ }
9917
9936
  });
9918
9937
  }
9919
9938
  };
@@ -9970,12 +9989,12 @@
9970
9989
  props.alert !== false && content.push(
9971
9990
  props.alertIcon !== void 0
9972
9991
  ? vue.h(QIcon, {
9973
- class: 'q-tab__alert-icon',
9974
- color: props.alert !== true
9975
- ? props.alert
9976
- : void 0,
9977
- name: props.alertIcon
9978
- })
9992
+ class: 'q-tab__alert-icon',
9993
+ color: props.alert !== true
9994
+ ? props.alert
9995
+ : void 0,
9996
+ name: props.alertIcon
9997
+ })
9979
9998
  : vue.h('div', {
9980
9999
  class: 'q-tab__alert'
9981
10000
  + (props.alert !== true ? ` text-${ props.alert }` : '')
@@ -11575,7 +11594,9 @@
11575
11594
  });
11576
11595
 
11577
11596
  function getLocale () {
11578
- return props.locale || $q.lang.date
11597
+ return props.locale !== void 0
11598
+ ? { ...$q.lang.date, ...props.locale }
11599
+ : $q.lang.date
11579
11600
  }
11580
11601
 
11581
11602
  function getCurrentDate (dateOnly) {
@@ -12767,7 +12788,7 @@
12767
12788
  const rangeModel = vue.computed(() => {
12768
12789
  const fn = date => decodeString(date, innerMask.value, innerLocale.value);
12769
12790
  return normalizedModel.value
12770
- .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)
12771
12792
  .map(range => ({ from: fn(range.from), to: fn(range.to) }))
12772
12793
  .filter(range => range.from.dateHash !== null && range.to.dateHash !== null && range.from.dateHash < range.to.dateHash)
12773
12794
  });
@@ -13820,24 +13841,24 @@
13820
13841
  }, days.value.map(day => vue.h('div', { class: day.classes }, [
13821
13842
  day.in === true
13822
13843
  ? vue.h(
13823
- QBtn, {
13824
- class: day.today === true ? 'q-date__today' : '',
13825
- dense: true,
13826
- flat: day.flat,
13827
- unelevated: day.unelevated,
13828
- color: day.color,
13829
- textColor: day.textColor,
13830
- label: day.i,
13831
- tabindex: tabindex.value,
13832
- ...getCache('day#' + day.i, {
13833
- onClick: () => { onDayClick(day.i); },
13834
- onMouseover: () => { onDayMouseover(day.i); }
13835
- })
13836
- },
13837
- day.event !== false
13838
- ? () => vue.h('div', { class: 'q-date__event bg-' + day.event })
13839
- : null
13840
- )
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
+ )
13841
13862
  : vue.h('div', '' + day.i)
13842
13863
  ]))))
13843
13864
  ])
@@ -14667,11 +14688,11 @@
14667
14688
  }, () => (
14668
14689
  useBackdrop.value === true
14669
14690
  ? vue.h('div', {
14670
- class: 'q-dialog__backdrop fixed-full',
14671
- style: transitionStyle.value,
14672
- 'aria-hidden': 'true',
14673
- onMousedown: onBackdropClick
14674
- })
14691
+ class: 'q-dialog__backdrop fixed-full',
14692
+ style: transitionStyle.value,
14693
+ 'aria-hidden': 'true',
14694
+ onMousedown: onBackdropClick
14695
+ })
14675
14696
  : null
14676
14697
  )),
14677
14698
 
@@ -14681,12 +14702,12 @@
14681
14702
  () => (
14682
14703
  showing.value === true
14683
14704
  ? vue.h('div', {
14684
- ref: innerRef,
14685
- class: classes.value,
14686
- style: transitionStyle.value,
14687
- tabindex: -1,
14688
- ...onEvents.value
14689
- }, hSlot(slots.default))
14705
+ ref: innerRef,
14706
+ class: classes.value,
14707
+ style: transitionStyle.value,
14708
+ tabindex: -1,
14709
+ ...onEvents.value
14710
+ }, hSlot(slots.default))
14690
14711
  : null
14691
14712
  )
14692
14713
  )
@@ -16007,18 +16028,18 @@
16007
16028
  function getTooltipContent () {
16008
16029
  return showing.value === true
16009
16030
  ? vue.h('div', {
16010
- ...attrs,
16011
- ref: innerRef,
16012
- class: [
16013
- 'q-tooltip q-tooltip--style q-position-engine no-pointer-events',
16014
- attrs.class
16015
- ],
16016
- style: [
16017
- attrs.style,
16018
- transitionStyle.value
16019
- ],
16020
- role: 'complementary'
16021
- }, 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))
16022
16043
  : null
16023
16044
  }
16024
16045
 
@@ -16233,8 +16254,8 @@
16233
16254
  if (btn.tip && eVm.$q.platform.is.desktop) {
16234
16255
  const Key = btn.key
16235
16256
  ? vue.h('div', [
16236
- vue.h('small', `(CTRL + ${ String.fromCharCode(btn.key) })`)
16237
- ])
16257
+ vue.h('small', `(CTRL + ${ String.fromCharCode(btn.key) })`)
16258
+ ])
16238
16259
  : null;
16239
16260
  child.push(
16240
16261
  vue.h(QTooltip, { delay: 1000 }, () => [
@@ -16520,36 +16541,6 @@
16520
16541
  return acc
16521
16542
  }
16522
16543
 
16523
- const
16524
- toString = Object.prototype.toString,
16525
- hasOwn = Object.prototype.hasOwnProperty,
16526
- class2type = {};
16527
-
16528
- 'Boolean Number String Function Array Date RegExp Object'.split(' ').forEach(name => {
16529
- class2type[ '[object ' + name + ']' ] = name.toLowerCase();
16530
- });
16531
-
16532
- function type (obj) {
16533
- return obj === null ? String(obj) : class2type[ toString.call(obj) ] || 'object'
16534
- }
16535
-
16536
- function isPlainObject (obj) {
16537
- if (!obj || type(obj) !== 'object') {
16538
- return false
16539
- }
16540
-
16541
- if (obj.constructor
16542
- && !hasOwn.call(obj, 'constructor')
16543
- && !hasOwn.call(obj.constructor.prototype, 'isPrototypeOf')) {
16544
- return false
16545
- }
16546
-
16547
- let key;
16548
- for (key in obj) {} // eslint-disable-line
16549
-
16550
- return key === undefined || hasOwn.call(obj, key)
16551
- }
16552
-
16553
16544
  function extend () {
16554
16545
  let
16555
16546
  options, name, src, copy, copyIsArray, clone,
@@ -16564,7 +16555,7 @@
16564
16555
  i = 2;
16565
16556
  }
16566
16557
 
16567
- if (Object(target) !== target && type(target) !== 'function') {
16558
+ if (Object(target) !== target && typeof target !== 'function') {
16568
16559
  target = {};
16569
16560
  }
16570
16561
 
@@ -16583,18 +16574,18 @@
16583
16574
  continue
16584
16575
  }
16585
16576
 
16586
- if (deep && copy && (isPlainObject(copy) || (copyIsArray = type(copy) === 'array'))) {
16577
+ if (deep && copy && (isObject(copy) === true || (copyIsArray = Array.isArray(copy) === true))) {
16587
16578
  if (copyIsArray) {
16588
16579
  copyIsArray = false;
16589
- clone = src && type(src) === 'array' ? src : [];
16580
+ clone = src && Array.isArray(src) === true ? src : [];
16590
16581
  }
16591
16582
  else {
16592
- clone = src && isPlainObject(src) ? src : {};
16583
+ clone = src && isObject(src) === true ? src : {};
16593
16584
  }
16594
16585
 
16595
16586
  target[ name ] = extend(deep, clone, copy);
16596
16587
  }
16597
- else if (copy !== undefined) {
16588
+ else if (copy !== void 0) {
16598
16589
  target[ name ] = copy;
16599
16590
  }
16600
16591
  }
@@ -16771,17 +16762,17 @@
16771
16762
  const userDef = props.definitions || {};
16772
16763
  const def = props.definitions || props.fonts
16773
16764
  ? extend(
16774
- true,
16775
- {},
16776
- buttonDef.value,
16777
- userDef,
16778
- getFonts(
16779
- defaultFont,
16780
- $q.lang.editor.defaultFont,
16781
- $q.iconSet.editor.font,
16782
- props.fonts
16783
- )
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
16784
16774
  )
16775
+ )
16785
16776
  : buttonDef.value;
16786
16777
 
16787
16778
  return props.toolbar.map(
@@ -17230,8 +17221,8 @@
17230
17221
 
17231
17222
  timer = setTimeout(() => {
17232
17223
  el.style.height = `${ el.scrollHeight }px`;
17233
- animListener = ev => {
17234
- if (Object(ev) !== ev || ev.target === el) {
17224
+ animListener = evt => {
17225
+ if (Object(evt) !== evt || evt.target === el) {
17235
17226
  end(el, 'show');
17236
17227
  }
17237
17228
  };
@@ -17256,8 +17247,8 @@
17256
17247
 
17257
17248
  timer = setTimeout(() => {
17258
17249
  el.style.height = 0;
17259
- animListener = ev => {
17260
- if (Object(ev) !== ev || ev.target === el) {
17250
+ animListener = evt => {
17251
+ if (Object(evt) !== evt || evt.target === el) {
17261
17252
  end(el, 'hide');
17262
17253
  }
17263
17254
  };
@@ -18454,18 +18445,20 @@
18454
18445
  }) {
18455
18446
  const { props, emit, proxy } = vue.getCurrentInstance();
18456
18447
 
18448
+ const dndRef = vue.ref(null);
18449
+
18457
18450
  const extensions = vue.computed(() => (
18458
18451
  props.accept !== void 0
18459
18452
  ? props.accept.split(',').map(ext => {
18460
- ext = ext.trim();
18461
- if (ext === '*') { // support "*"
18462
- return '*/'
18463
- }
18464
- else if (ext.endsWith('/*')) { // support "image/*" or "*/*"
18465
- ext = ext.slice(0, ext.length - 1);
18466
- }
18467
- return ext.toUpperCase()
18468
- })
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
+ })
18469
18462
  : null
18470
18463
  ));
18471
18464
 
@@ -18530,7 +18523,7 @@
18530
18523
  // Cordova/iOS allows selecting multiple files even when the
18531
18524
  // multiple attribute is not specified. We also normalize drag'n'dropped
18532
18525
  // files here:
18533
- if (props.multiple !== true) {
18526
+ if (props.multiple !== true && files.length > 0) {
18534
18527
  files = [ files[ 0 ] ];
18535
18528
  }
18536
18529
 
@@ -18595,7 +18588,7 @@
18595
18588
 
18596
18589
  function onDragleave (e) {
18597
18590
  stopAndPrevent(e);
18598
- dnd.value = false;
18591
+ e.relatedTarget !== dndRef.value && (dnd.value = false);
18599
18592
  }
18600
18593
 
18601
18594
  function onDrop (e) {
@@ -18612,6 +18605,7 @@
18612
18605
  function getDndNode (type) {
18613
18606
  if (dnd.value === true) {
18614
18607
  return vue.h('div', {
18608
+ ref: dndRef,
18615
18609
  class: `q-${ type }__dnd absolute-full`,
18616
18610
  onDragenter: stopAndPreventDrag,
18617
18611
  onDragover: stopAndPreventDrag,
@@ -18731,6 +18725,7 @@
18731
18725
  pickFiles,
18732
18726
  addFiles,
18733
18727
  onDragover,
18728
+ onDragleave,
18734
18729
  processFiles,
18735
18730
  getDndNode,
18736
18731
  maxFilesNumber,
@@ -19010,10 +19005,10 @@
19010
19005
  }, [
19011
19006
  file.__status === 'failed'
19012
19007
  ? vue.h(QIcon, {
19013
- class: 'q-uploader__file-status',
19014
- name: $q.iconSet.type.negative,
19015
- color: 'negative'
19016
- })
19008
+ class: 'q-uploader__file-status',
19009
+ name: $q.iconSet.type.negative,
19010
+ color: 'negative'
19011
+ })
19017
19012
  : null,
19018
19013
 
19019
19014
  vue.h('div', { class: 'q-uploader__file-header-content col' }, [
@@ -19027,11 +19022,11 @@
19027
19022
 
19028
19023
  file.__status === 'uploading'
19029
19024
  ? vue.h(QCircularProgress, {
19030
- value: file.__progress,
19031
- min: 0,
19032
- max: 1,
19033
- indeterminate: file.__progress === 0
19034
- })
19025
+ value: file.__progress,
19026
+ min: 0,
19027
+ max: 1,
19028
+ indeterminate: file.__progress === 0
19029
+ })
19035
19030
  : vue.h(QBtn, {
19036
19031
  round: true,
19037
19032
  dense: true,
@@ -19100,7 +19095,7 @@
19100
19095
  const data = { ref: rootRef, class: classes.value };
19101
19096
 
19102
19097
  if (canAddFiles.value === true) {
19103
- data.onDragover = onDragover;
19098
+ Object.assign(data, { onDragover, onDragleave });
19104
19099
  }
19105
19100
 
19106
19101
  return vue.h('div', data, children)
@@ -19129,7 +19124,7 @@
19129
19124
  ...props
19130
19125
  },
19131
19126
 
19132
- emits: Object(emits) === emits
19127
+ emits: isObject(emits) === true
19133
19128
  ? { ...coreEmitsObject, ...emits }
19134
19129
  : [ ...coreEmits, ...emits ],
19135
19130
 
@@ -19683,7 +19678,7 @@
19683
19678
  if (typeof options.style === 'string') {
19684
19679
  elTo.style.cssText += ' ' + options.style;
19685
19680
  }
19686
- else if (options.style === Object(options.style)) {
19681
+ else if (isObject(options.style) === true) {
19687
19682
  for (const prop in options.style) {
19688
19683
  elTo.style[ prop ] = options.style[ prop ];
19689
19684
  }
@@ -20120,8 +20115,8 @@
20120
20115
  elToClone.style.animation = `${ options.duration }ms ${ options.easing } ${ options.delay }ms ${ animationDirection } ${ options.fill } ${ qAnimId }-to`;
20121
20116
  elTo.style.animation = `${ options.duration }ms ${ options.easing } ${ options.delay }ms ${ animationDirection } ${ options.fill } ${ qAnimId }`;
20122
20117
 
20123
- const cleanup = ev => {
20124
- if (ev === Object(ev) && ev.animationName !== qAnimId) {
20118
+ const cleanup = evt => {
20119
+ if (evt === Object(evt) && evt.animationName !== qAnimId) {
20125
20120
  return
20126
20121
  }
20127
20122
 
@@ -20184,24 +20179,24 @@
20184
20179
  : (
20185
20180
  options.waitFor === 'transitionend'
20186
20181
  ? new Promise(resolve => {
20187
- const timer = setTimeout(() => {
20188
- endFn();
20189
- }, 400);
20182
+ const timer = setTimeout(() => {
20183
+ endFn();
20184
+ }, 400);
20190
20185
 
20191
- const endFn = ev => {
20192
- clearTimeout(timer);
20186
+ const endFn = ev => {
20187
+ clearTimeout(timer);
20193
20188
 
20194
- if (elTo) {
20195
- elTo.removeEventListener('transitionend', endFn);
20196
- elTo.removeEventListener('transitioncancel', endFn);
20197
- }
20189
+ if (elTo) {
20190
+ elTo.removeEventListener('transitionend', endFn);
20191
+ elTo.removeEventListener('transitioncancel', endFn);
20192
+ }
20198
20193
 
20199
- resolve();
20200
- };
20194
+ resolve();
20195
+ };
20201
20196
 
20202
- elTo.addEventListener('transitionend', endFn);
20203
- elTo.addEventListener('transitioncancel', endFn);
20204
- })
20197
+ elTo.addEventListener('transitionend', endFn);
20198
+ elTo.addEventListener('transitioncancel', endFn);
20199
+ })
20205
20200
  : options.waitFor
20206
20201
  );
20207
20202
 
@@ -20878,14 +20873,6 @@
20878
20873
  }, getControlContainer())
20879
20874
  );
20880
20875
 
20881
- slots.append !== void 0 && node.push(
20882
- vue.h('div', {
20883
- class: 'q-field__append q-field__marginal row no-wrap items-center',
20884
- key: 'append',
20885
- onClick: prevent
20886
- }, slots.append())
20887
- );
20888
-
20889
20876
  hasError.value === true && props.noErrorIcon === false && node.push(
20890
20877
  getInnerAppendNode('error', [
20891
20878
  vue.h(QIcon, { name: $q.iconSet.field.error, color: 'negative' })
@@ -20919,6 +20906,14 @@
20919
20906
  );
20920
20907
  }
20921
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
+
20922
20917
  state.getInnerAppend !== void 0 && node.push(
20923
20918
  getInnerAppendNode('inner-append', state.getInnerAppend())
20924
20919
  );
@@ -21023,8 +21018,8 @@
21023
21018
 
21024
21019
  hasCounter === true
21025
21020
  ? vue.h('div', {
21026
- class: 'q-field__counter'
21027
- }, slots.counter !== void 0 ? slots.counter() : state.computedCounter.value)
21021
+ class: 'q-field__counter'
21022
+ }, slots.counter !== void 0 ? slots.counter() : state.computedCounter.value)
21028
21023
  : null
21029
21024
  ])
21030
21025
  }
@@ -21064,6 +21059,14 @@
21064
21059
  });
21065
21060
 
21066
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
+
21067
21070
  return vue.h('label', {
21068
21071
  ref: state.rootRef,
21069
21072
  class: [
@@ -21071,13 +21074,13 @@
21071
21074
  attrs.class
21072
21075
  ],
21073
21076
  style: attrs.style,
21074
- ...attributes.value
21077
+ ...labelAttrs
21075
21078
  }, [
21076
21079
  slots.before !== void 0
21077
21080
  ? vue.h('div', {
21078
- class: 'q-field__before q-field__marginal row no-wrap items-center',
21079
- onClick: prevent
21080
- }, slots.before())
21081
+ class: 'q-field__before q-field__marginal row no-wrap items-center',
21082
+ onClick: prevent
21083
+ }, slots.before())
21081
21084
  : null,
21082
21085
 
21083
21086
  vue.h('div', {
@@ -21097,9 +21100,9 @@
21097
21100
 
21098
21101
  slots.after !== void 0
21099
21102
  ? vue.h('div', {
21100
- class: 'q-field__after q-field__marginal row no-wrap items-center',
21101
- onClick: prevent
21102
- }, slots.after())
21103
+ class: 'q-field__after q-field__marginal row no-wrap items-center',
21104
+ onClick: prevent
21105
+ }, slots.after())
21103
21106
  : null
21104
21107
  ])
21105
21108
  }
@@ -21153,12 +21156,12 @@
21153
21156
 
21154
21157
  return typeGuard === true
21155
21158
  ? vue.computed(() => {
21156
- if (props.type !== 'file') {
21157
- return
21158
- }
21159
+ if (props.type !== 'file') {
21160
+ return
21161
+ }
21159
21162
 
21160
- return getFormDomProps()
21161
- })
21163
+ return getFormDomProps()
21164
+ })
21162
21165
  : vue.computed(getFormDomProps)
21163
21166
  }
21164
21167
 
@@ -21207,6 +21210,7 @@
21207
21210
  const {
21208
21211
  pickFiles,
21209
21212
  onDragover,
21213
+ onDragleave,
21210
21214
  processFiles,
21211
21215
  getDndNode
21212
21216
  } = useFile({ editable: state.editable, dnd, getFileInput, addFilesToQueue });
@@ -21412,7 +21416,7 @@
21412
21416
  };
21413
21417
 
21414
21418
  if (state.editable.value === true) {
21415
- Object.assign(data, { onDragover, onKeydown, onKeyup });
21419
+ Object.assign(data, { onDragover, onDragleave, onKeydown, onKeyup });
21416
21420
  }
21417
21421
 
21418
21422
  return vue.h('div', data, [ getInput() ].concat(getSelection()))
@@ -22425,7 +22429,9 @@
22425
22429
  isWorking.value = false;
22426
22430
  isFetching.value = false;
22427
22431
  localScrollTarget.removeEventListener('scroll', poll, passive$3);
22428
- poll !== void 0 && poll.cancel();
22432
+ if (poll !== void 0 && poll.cancel !== void 0) {
22433
+ poll.cancel();
22434
+ }
22429
22435
  }
22430
22436
  }
22431
22437
 
@@ -22570,7 +22576,7 @@
22570
22576
 
22571
22577
  const labelClass = vue.computed(() =>
22572
22578
  'q-inner-loading__label'
22573
- + (props.labelClass !== void 0 ? ` ${ props.labelClass}` : '')
22579
+ + (props.labelClass !== void 0 ? ` ${ props.labelClass }` : '')
22574
22580
  );
22575
22581
 
22576
22582
  function getInner () {
@@ -22596,12 +22602,12 @@
22596
22602
  function getContent () {
22597
22603
  return props.showing === true
22598
22604
  ? vue.h(
22599
- 'div',
22600
- { class: classes.value, style: transitionStyle.value },
22601
- slots.default !== void 0
22602
- ? slots.default()
22603
- : getInner()
22604
- )
22605
+ 'div',
22606
+ { class: classes.value, style: transitionStyle.value },
22607
+ slots.default !== void 0
22608
+ ? slots.default()
22609
+ : getInner()
22610
+ )
22605
22611
  : null
22606
22612
  }
22607
22613
 
@@ -22907,7 +22913,7 @@
22907
22913
  ? unmaskValue(masked)
22908
22914
  : masked;
22909
22915
 
22910
- props.modelValue !== val && emitValue(val, true);
22916
+ String(props.modelValue) !== val && emitValue(val, true);
22911
22917
  }
22912
22918
 
22913
22919
  function moveCursorForPaste (inp, start, end) {
@@ -23307,7 +23313,10 @@
23307
23313
  if (hasMask.value === true) {
23308
23314
  if (stopValueWatcher === true) {
23309
23315
  stopValueWatcher = false;
23310
- return
23316
+
23317
+ if (String(v) === emitCachedValue) {
23318
+ return
23319
+ }
23311
23320
  }
23312
23321
 
23313
23322
  updateMaskValue(v);
@@ -23802,6 +23811,9 @@
23802
23811
  required: true
23803
23812
  },
23804
23813
 
23814
+ innerMin: Number,
23815
+ innerMax: Number,
23816
+
23805
23817
  step: {
23806
23818
  type: Number,
23807
23819
  default: 1,
@@ -23826,27 +23838,33 @@
23826
23838
  const model = vue.ref(props.modelValue);
23827
23839
  const dragging = vue.ref(false);
23828
23840
 
23829
- let centerPosition, $el;
23841
+ const innerMin = vue.computed(() => (
23842
+ isNaN(props.innerMin) === true || props.innerMin < props.min
23843
+ ? props.min
23844
+ : props.innerMin
23845
+ ));
23846
+ const innerMax = vue.computed(() => (
23847
+ isNaN(props.innerMax) === true || props.innerMax > props.max
23848
+ ? props.max
23849
+ : props.innerMax
23850
+ ));
23830
23851
 
23831
- vue.watch(() => props.modelValue, val => {
23832
- if (val < props.min) {
23833
- model.value = props.min;
23834
- }
23835
- else if (val > props.max) {
23836
- model.value = props.max;
23837
- }
23838
- else {
23839
- if (val !== model.value) {
23840
- model.value = val;
23841
- }
23842
- return
23843
- }
23852
+ let centerPosition;
23844
23853
 
23845
- if (model.value !== props.modelValue) {
23846
- emit('update:modelValue', model.value);
23847
- emit('change', model.value);
23848
- }
23849
- });
23854
+ function normalizeModel () {
23855
+ model.value = props.modelValue === null
23856
+ ? innerMin.value
23857
+ : between(props.modelValue, innerMin.value, innerMax.value);
23858
+
23859
+ updateValue(true);
23860
+ }
23861
+
23862
+ vue.watch(
23863
+ () => `${ props.modelValue }|${ innerMin.value }|${ innerMax.value }`,
23864
+ normalizeModel
23865
+ );
23866
+
23867
+ normalizeModel();
23850
23868
 
23851
23869
  const editable = vue.computed(() => props.disable === false && props.readonly === false);
23852
23870
 
@@ -23914,7 +23932,7 @@
23914
23932
  });
23915
23933
 
23916
23934
  function updateCenterPosition () {
23917
- const { top, left, width, height } = $el.getBoundingClientRect();
23935
+ const { top, left, width, height } = proxy.$el.getBoundingClientRect();
23918
23936
  centerPosition = {
23919
23937
  top: top + height / 2,
23920
23938
  left: left + width / 2
@@ -23944,8 +23962,8 @@
23944
23962
 
23945
23963
  model.value = between(
23946
23964
  parseFloat((model.value + offset).toFixed(decimals.value)),
23947
- props.min,
23948
- props.max
23965
+ innerMin.value,
23966
+ innerMax.value
23949
23967
  );
23950
23968
 
23951
23969
  updateValue();
@@ -23969,11 +23987,14 @@
23969
23987
  angle = centerPosition.left < pos.left ? angle + 90 : 270 - angle;
23970
23988
  }
23971
23989
 
23972
- if (props.angle) {
23990
+ if ($q.lang.rtl === true) {
23991
+ angle = normalizeToInterval(-angle - props.angle, 0, 360);
23992
+ }
23993
+ else if (props.angle) {
23973
23994
  angle = normalizeToInterval(angle - props.angle, 0, 360);
23974
23995
  }
23975
23996
 
23976
- if ($q.lang.rtl === true) {
23997
+ if (props.reverse === true) {
23977
23998
  angle = 360 - angle;
23978
23999
  }
23979
24000
 
@@ -23988,7 +24009,7 @@
23988
24009
  newModel = parseFloat(newModel.toFixed(decimals.value));
23989
24010
  }
23990
24011
 
23991
- newModel = between(newModel, props.min, props.max);
24012
+ newModel = between(newModel, innerMin.value, innerMax.value);
23992
24013
 
23993
24014
  emit('drag-value', newModel);
23994
24015
 
@@ -24016,16 +24037,12 @@
24016
24037
  return vue.h('input', formAttrs.value)
24017
24038
  }
24018
24039
 
24019
- vue.onMounted(() => {
24020
- $el = proxy.$el;
24021
- });
24022
-
24023
24040
  return () => {
24024
24041
  const data = {
24025
24042
  class: classes.value,
24026
24043
  role: 'slider',
24027
- 'aria-valuemin': props.min,
24028
- 'aria-valuemax': props.max,
24044
+ 'aria-valuemin': innerMin.value,
24045
+ 'aria-valuemax': innerMax.value,
24029
24046
  'aria-valuenow': props.modelValue,
24030
24047
  ...attrs.value,
24031
24048
  ...circularProps.value,
@@ -24038,18 +24055,18 @@
24038
24055
  default: slots.default
24039
24056
  };
24040
24057
 
24041
- if (editable.value === true) {
24042
- if (props.name !== void 0) {
24043
- child.internal = getNameInput;
24044
- }
24045
-
24046
- return vue.withDirectives(
24047
- vue.h(QCircularProgress, data, child),
24048
- directives.value
24049
- )
24058
+ if (editable.value === true && props.name !== void 0) {
24059
+ child.internal = getNameInput;
24050
24060
  }
24051
24061
 
24052
- return vue.h(QCircularProgress, data, child)
24062
+ return hDir(
24063
+ QCircularProgress,
24064
+ data,
24065
+ child,
24066
+ 'knob',
24067
+ editable.value,
24068
+ () => directives.value
24069
+ )
24053
24070
  }
24054
24071
  }
24055
24072
  });
@@ -25163,10 +25180,10 @@
25163
25180
  function getContent () {
25164
25181
  return showing.value === true
25165
25182
  ? vue.h('div', {
25166
- ref: rootRef,
25167
- class: 'q-page-scroller',
25168
- onClick
25169
- }, getStickyContent(slots))
25183
+ ref: rootRef,
25184
+ class: 'q-page-scroller',
25185
+ onClick
25186
+ }, getStickyContent(slots))
25170
25187
  : null
25171
25188
  }
25172
25189
 
@@ -26175,7 +26192,7 @@
26175
26192
  }
26176
26193
 
26177
26194
  if (event.isFirst === true) {
26178
- if (getVerticalScrollPosition(localScrollTarget) !== 0 || event.direction !== "down") {
26195
+ if (getVerticalScrollPosition(localScrollTarget) !== 0 || event.direction !== 'down') {
26179
26196
  if (pulling.value === true) {
26180
26197
  pulling.value = false;
26181
26198
  state.value = 'pull';
@@ -26288,10 +26305,10 @@
26288
26305
  }, [
26289
26306
  state.value !== 'refreshing'
26290
26307
  ? vue.h(QIcon, {
26291
- name: props.icon || $q.iconSet.pullToRefresh.icon,
26292
- color: props.color,
26293
- size: '32px'
26294
- })
26308
+ name: props.icon || $q.iconSet.pullToRefresh.icon,
26309
+ color: props.color,
26310
+ size: '32px'
26311
+ })
26295
26312
  : vue.h(QSpinner, {
26296
26313
  size: '24px',
26297
26314
  color: props.color
@@ -28017,17 +28034,17 @@
28017
28034
  return [
28018
28035
  tag === 'tbody'
28019
28036
  ? vue.h(tag, {
28020
- class: 'q-virtual-scroll__padding',
28021
- key: 'before',
28022
- ref: beforeRef
28023
- }, [
28024
- vue.h('tr', [
28025
- vue.h('td', {
28026
- style: { [ paddingSize ]: `${ virtualScrollPaddingBefore.value }px`, ...style },
28027
- colspan: colspanAttr.value
28028
- })
28029
- ])
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
+ })
28030
28046
  ])
28047
+ ])
28031
28048
  : vue.h(tag, {
28032
28049
  class: 'q-virtual-scroll__padding',
28033
28050
  key: 'before',
@@ -28045,17 +28062,17 @@
28045
28062
 
28046
28063
  tag === 'tbody'
28047
28064
  ? vue.h(tag, {
28048
- class: 'q-virtual-scroll__padding',
28049
- key: 'after',
28050
- ref: afterRef
28051
- }, [
28052
- vue.h('tr', [
28053
- vue.h('td', {
28054
- style: { [ paddingSize ]: `${ virtualScrollPaddingAfter.value }px`, ...style },
28055
- colspan: colspanAttr.value
28056
- })
28057
- ])
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
+ })
28058
28074
  ])
28075
+ ])
28059
28076
  : vue.h(tag, {
28060
28077
  class: 'q-virtual-scroll__padding',
28061
28078
  key: 'after',
@@ -28451,7 +28468,7 @@
28451
28468
  itemProps[ 'aria-selected' ] = itemProps.active === true ? 'true' : 'false';
28452
28469
 
28453
28470
  if ($q.platform.is.desktop === true) {
28454
- itemProps.onMousemove = () => { setOptionIndex(index); };
28471
+ itemProps.onMousemove = () => { menu.value === true && setOptionIndex(index); };
28455
28472
  }
28456
28473
  }
28457
28474
 
@@ -28716,7 +28733,7 @@
28716
28733
 
28717
28734
  return typeof val === 'function'
28718
28735
  ? val
28719
- : opt => (Object(opt) === opt && val in opt ? opt[ val ] : opt)
28736
+ : opt => (opt !== null && typeof opt === 'object' && val in opt ? opt[ val ] : opt)
28720
28737
  }
28721
28738
 
28722
28739
  function isOptionSelected (opt) {
@@ -29089,6 +29106,8 @@
29089
29106
  }
29090
29107
 
29091
29108
  function getInput (fromDialog, isTarget) {
29109
+ const attrs = isTarget === true ? { ...comboboxAttrs.value, ...state.splitAttrs.attributes.value } : void 0;
29110
+
29092
29111
  const data = {
29093
29112
  ref: isTarget === true ? targetRef : void 0,
29094
29113
  key: 'i_t',
@@ -29097,8 +29116,7 @@
29097
29116
  value: inputValue.value !== void 0 ? inputValue.value : '',
29098
29117
  // required for Android in order to show ENTER key when in form
29099
29118
  type: 'search',
29100
- ...comboboxAttrs.value,
29101
- ...state.splitAttrs.attributes.value,
29119
+ ...attrs,
29102
29120
  id: isTarget === true ? state.targetUid.value : void 0,
29103
29121
  maxlength: props.maxlength,
29104
29122
  autocomplete: props.autocomplete,
@@ -29499,6 +29517,7 @@
29499
29517
  Object.assign(proxy, {
29500
29518
  showPopup, hidePopup,
29501
29519
  removeAtIndex, add, toggleOption,
29520
+ getOptionIndex: () => optionIndex.value,
29502
29521
  setOptionIndex, moveOptionSelection,
29503
29522
  filter, updateMenuPosition, updateInputValue,
29504
29523
  isOptionSelected,
@@ -29577,13 +29596,16 @@
29577
29596
  }
29578
29597
  // there can be only one (when dialog is opened the control in dialog should be target)
29579
29598
  else if (state.editable.value === true) {
29599
+ const attrs = isTarget === true ? comboboxAttrs.value : void 0;
29600
+
29580
29601
  child.push(
29581
- vue.h('div', {
29602
+ vue.h('input', {
29582
29603
  ref: isTarget === true ? targetRef : void 0,
29583
29604
  key: 'd_t',
29584
29605
  class: 'q-select__focus-target',
29585
29606
  id: isTarget === true ? state.targetUid.value : void 0,
29586
- ...comboboxAttrs.value,
29607
+ readonly: true,
29608
+ ...attrs,
29587
29609
  onKeydown: onTargetKeydown,
29588
29610
  onKeyup: onTargetKeyup,
29589
29611
  onKeypress: onTargetKeypress
@@ -29613,9 +29635,11 @@
29613
29635
  );
29614
29636
  }
29615
29637
 
29638
+ const attrs = props.useInput === true || isTarget !== true ? void 0 : state.splitAttrs.attributes.value;
29639
+
29616
29640
  return vue.h('div', {
29617
29641
  class: 'q-field__native row items-center',
29618
- ...state.splitAttrs.attributes.value
29642
+ ...attrs
29619
29643
  }, child)
29620
29644
  },
29621
29645
 
@@ -32134,23 +32158,36 @@
32134
32158
 
32135
32159
  const hasPrefix = vue.computed(() => {
32136
32160
  return props.step.prefix
32137
- && isActive.value === false
32138
- && isError.value === false
32139
- && 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')
32140
32164
  });
32141
32165
 
32142
32166
  const icon = vue.computed(() => {
32167
+ const defaultIcon = props.step.icon || props.stepper.inactiveIcon;
32168
+
32143
32169
  if (isActive.value === true) {
32144
- 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
32145
32174
  }
32175
+
32146
32176
  if (isError.value === true) {
32147
- 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
32148
32181
  }
32182
+
32149
32183
  if (isDisable.value === false && isDone.value === true) {
32150
- 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
32151
32188
  }
32152
32189
 
32153
- return props.step.icon || props.stepper.inactiveIcon
32190
+ return defaultIcon
32154
32191
  });
32155
32192
 
32156
32193
  const color = vue.computed(() => {
@@ -32177,7 +32214,9 @@
32177
32214
  const classes = vue.computed(() => {
32178
32215
  return 'q-stepper__tab col-grow flex items-center no-wrap relative-position'
32179
32216
  + (color.value !== void 0 ? ` text-${ color.value }` : '')
32180
- + (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
+ : '')
32181
32220
  + (isActive.value === true ? ' q-stepper__tab--active' : '')
32182
32221
  + (isDone.value === true ? ' q-stepper__tab--done' : '')
32183
32222
  + (headerNav.value === true ? ' q-stepper__tab--navigation q-focusable q-hoverable' : '')
@@ -32318,14 +32357,14 @@
32318
32357
  || $stepper.value.vertical !== true
32319
32358
  ? {}
32320
32359
  : {
32321
- onScroll (e) {
32322
- const { target } = e;
32323
- if (target.scrollTop > 0) {
32324
- 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);
32325
32366
  }
32326
- attrs.onScroll !== void 0 && attrs.onScroll(e);
32327
32367
  }
32328
- }
32329
32368
  ));
32330
32369
 
32331
32370
  const contentKey = vue.computed(() => (
@@ -32719,9 +32758,9 @@
32719
32758
 
32720
32759
  return props.type === '__qtable'
32721
32760
  ? getTableMiddle(
32722
- { ref: rootRef, class: 'q-table__middle ' + classes.value },
32723
- __getVirtualChildren()
32724
- )
32761
+ { ref: rootRef, class: 'q-table__middle ' + classes.value },
32762
+ __getVirtualChildren()
32763
+ )
32725
32764
  : vue.h(comps[ props.type ], {
32726
32765
  ...attrs,
32727
32766
  ref: rootRef,
@@ -32806,7 +32845,7 @@
32806
32845
  function sort (col /* String(col name) or Object(col definition) */) {
32807
32846
  let sortOrder = props.columnSortOrder;
32808
32847
 
32809
- if (col === Object(col)) {
32848
+ if (isObject(col) === true) {
32810
32849
  if (col.sortOrder) {
32811
32850
  sortOrder = col.sortOrder;
32812
32851
  }
@@ -33262,12 +33301,12 @@
33262
33301
 
33263
33302
  return row !== void 0
33264
33303
  ? Object.keys(row).map(name => ({
33265
- name,
33266
- label: name.toUpperCase(),
33267
- field: name,
33268
- align: isNumber(row[ name ]) ? 'right' : 'left',
33269
- sortable: true
33270
- }))
33304
+ name,
33305
+ label: name.toUpperCase(),
33306
+ field: name,
33307
+ align: isNumber(row[ name ]) ? 'right' : 'left',
33308
+ sortable: true
33309
+ }))
33271
33310
  : []
33272
33311
  });
33273
33312
 
@@ -34518,12 +34557,14 @@
34518
34557
  const mask = vue.computed(() => getMask());
34519
34558
  const locale = vue.computed(() => getLocale());
34520
34559
 
34560
+ const defaultDateModel = vue.computed(() => getDefaultDateModel());
34561
+
34521
34562
  const model = __splitDate(
34522
34563
  props.modelValue,
34523
- getMask(),
34524
- getLocale(),
34564
+ mask.value, // initial mask
34565
+ locale.value, // initial locale
34525
34566
  props.calendar,
34526
- getDefaultDateModel()
34567
+ defaultDateModel.value
34527
34568
  );
34528
34569
 
34529
34570
  const view = vue.ref(getViewByModel(model));
@@ -34563,8 +34604,6 @@
34563
34604
  }
34564
34605
  });
34565
34606
 
34566
- const defaultDateModel = vue.computed(() => getDefaultDateModel());
34567
-
34568
34607
  const computedFormat24h = vue.computed(() => (
34569
34608
  props.format24h !== null
34570
34609
  ? props.format24h
@@ -37541,15 +37580,15 @@
37541
37580
  || client.is.webkit === true || client.is.vivaldi === true
37542
37581
  )
37543
37582
  ? hexColor => {
37544
- const val = hexColor || getCssVar('primary');
37583
+ const val = hexColor || getCssVar('primary');
37545
37584
 
37546
- if (client.is.nativeMobile === true && window.StatusBar) {
37547
- window.StatusBar.backgroundColorByHexString(val);
37548
- }
37549
- else {
37550
- setColor(val);
37551
- }
37585
+ if (client.is.nativeMobile === true && window.StatusBar) {
37586
+ window.StatusBar.backgroundColorByHexString(val);
37552
37587
  }
37588
+ else {
37589
+ setColor(val);
37590
+ }
37591
+ }
37553
37592
  : noop,
37554
37593
 
37555
37594
  install ({ $q }) {
@@ -37756,9 +37795,9 @@
37756
37795
 
37757
37796
  return action.label === void 0
37758
37797
  ? vue.h(QSeparator, {
37759
- class: 'col-all',
37760
- dark: isDark.value
37761
- })
37798
+ class: 'col-all',
37799
+ dark: isDark.value
37800
+ })
37762
37801
  : vue.h('div', {
37763
37802
  class: [
37764
37803
  'q-bottom-sheet__item q-hoverable q-focusable cursor-pointer relative-position',
@@ -37775,9 +37814,9 @@
37775
37814
  : (
37776
37815
  img
37777
37816
  ? vue.h('img', {
37778
- class: action.avatar ? 'q-bottom-sheet__avatar' : '',
37779
- src: img
37780
- })
37817
+ class: action.avatar ? 'q-bottom-sheet__avatar' : '',
37818
+ src: img
37819
+ })
37781
37820
  : vue.h('div', { class: 'q-bottom-sheet__empty-icon' })
37782
37821
  ),
37783
37822
 
@@ -37809,9 +37848,9 @@
37809
37848
  : (
37810
37849
  img
37811
37850
  ? vue.h('img', {
37812
- class: action.avatar ? 'q-bottom-sheet__avatar' : '',
37813
- src: img
37814
- })
37851
+ class: action.avatar ? 'q-bottom-sheet__avatar' : '',
37852
+ src: img
37853
+ })
37815
37854
  : null
37816
37855
  )
37817
37856
  )
@@ -37840,8 +37879,8 @@
37840
37879
  child.push(
37841
37880
  props.grid === true
37842
37881
  ? vue.h('div', {
37843
- class: 'row items-stretch justify-start'
37844
- }, getGrid())
37882
+ class: 'row items-stretch justify-start'
37883
+ }, getGrid())
37845
37884
  : vue.h('div', getList())
37846
37885
  );
37847
37886
 
@@ -38057,7 +38096,11 @@
38057
38096
  string = decode$1(string.replace(/\+/g, ' '));
38058
38097
 
38059
38098
  try {
38060
- string = JSON.parse(string);
38099
+ const parsed = JSON.parse(string);
38100
+
38101
+ if (parsed === Object(parsed) || Array.isArray(parsed) === true) {
38102
+ string = parsed;
38103
+ }
38061
38104
  }
38062
38105
  catch (e) {}
38063
38106
 
@@ -38284,7 +38327,7 @@
38284
38327
  props.progress === false
38285
38328
  ? null
38286
38329
  : (
38287
- Object(props.progress) === props.progress
38330
+ isObject(props.progress) === true
38288
38331
  ? {
38289
38332
  component: props.progress.spinner || QSpinner,
38290
38333
  props: { color: props.progress.color || vmColor.value }
@@ -38313,7 +38356,7 @@
38313
38356
  });
38314
38357
 
38315
38358
  const okLabel = vue.computed(() => (
38316
- Object(props.ok) === props.ok
38359
+ isObject(props.ok) === true
38317
38360
  ? $q.lang.label.ok
38318
38361
  : (
38319
38362
  props.ok === true
@@ -38323,7 +38366,7 @@
38323
38366
  ));
38324
38367
 
38325
38368
  const cancelLabel = vue.computed(() => (
38326
- Object(props.cancel) === props.cancel
38369
+ isObject(props.cancel) === true
38327
38370
  ? $q.lang.label.cancel
38328
38371
  : (
38329
38372
  props.cancel === true
@@ -38349,7 +38392,7 @@
38349
38392
  label: okLabel.value,
38350
38393
  ripple: false,
38351
38394
  disable: okDisabled.value,
38352
- ...(Object(props.ok) === props.ok ? props.ok : { flat: true }),
38395
+ ...(isObject(props.ok) === true ? props.ok : { flat: true }),
38353
38396
  'data-autofocus': (props.focus === 'ok' && hasForm.value !== true) || void 0,
38354
38397
  onClick: onOk
38355
38398
  }));
@@ -38358,7 +38401,7 @@
38358
38401
  color: vmColor.value,
38359
38402
  label: cancelLabel.value,
38360
38403
  ripple: false,
38361
- ...(Object(props.cancel) === props.cancel ? props.cancel : { flat: true }),
38404
+ ...(isObject(props.cancel) === true ? props.cancel : { flat: true }),
38362
38405
  'data-autofocus': (props.focus === 'cancel' && hasForm.value !== true) || void 0,
38363
38406
  onClick: onCancel
38364
38407
  }));
@@ -38405,9 +38448,9 @@
38405
38448
  function getSection (classes, text) {
38406
38449
  return props.html === true
38407
38450
  ? vue.h(QCardSection, {
38408
- class: classes,
38409
- innerHTML: text
38410
- })
38451
+ class: classes,
38452
+ innerHTML: text
38453
+ })
38411
38454
  : vue.h(QCardSection, { class: classes }, () => text)
38412
38455
  }
38413
38456
 
@@ -38562,6 +38605,14 @@
38562
38605
  : {}
38563
38606
  );
38564
38607
 
38608
+ function onStart () {
38609
+ Plugin$3.isActive = true;
38610
+ }
38611
+
38612
+ function onStop () {
38613
+ Plugin$3.isActive = false;
38614
+ }
38615
+
38565
38616
  const el = createGlobalNode('q-loading-bar');
38566
38617
 
38567
38618
  createChildApp({
@@ -38570,23 +38621,21 @@
38570
38621
  // hide App from Vue devtools
38571
38622
  devtools: { hide: true },
38572
38623
 
38573
- setup: () => () => vue.h(QAjaxBar, { ...props.value, ref: barRef })
38624
+ setup: () => () => vue.h(QAjaxBar, { ...props.value, onStart, onStop, ref: barRef })
38574
38625
  }, parentApp).mount(el);
38575
38626
 
38576
38627
  Object.assign(this, {
38577
38628
  start (speed) {
38578
38629
  barRef.value.start(speed);
38579
- Plugin$3.isActive = true;
38580
38630
  },
38581
38631
  stop () {
38582
- const sessions = barRef.value.stop();
38583
- Plugin$3.isActive = sessions > 0;
38632
+ barRef.value.stop();
38584
38633
  },
38585
38634
  increment () {
38586
38635
  barRef.value.increment.apply(null, arguments);
38587
38636
  },
38588
38637
  setDefaults (opts) {
38589
- if (opts === Object(opts)) {
38638
+ if (isObject(opts) === true) {
38590
38639
  Object.assign(props.value, opts);
38591
38640
  }
38592
38641
  }
@@ -38621,7 +38670,7 @@
38621
38670
  }, {
38622
38671
  show (opts) {
38623
38672
 
38624
- props = opts === Object(opts) && opts.ignoreDefaults === true
38673
+ props = isObject(opts) === true && opts.ignoreDefaults === true
38625
38674
  ? { ...originalDefaults, ...opts }
38626
38675
  : { ...defaults$1, ...opts };
38627
38676
 
@@ -38722,7 +38771,7 @@
38722
38771
 
38723
38772
  setDefaults (opts) {
38724
38773
  {
38725
- opts === Object(opts) && Object.assign(defaults$1, opts);
38774
+ isObject(opts) === true && Object.assign(defaults$1, opts);
38726
38775
  }
38727
38776
  },
38728
38777
 
@@ -38797,7 +38846,7 @@
38797
38846
  Object.assign(notif, defaults);
38798
38847
  }
38799
38848
 
38800
- if (Object(config) !== config) {
38849
+ if (isObject(config) === false) {
38801
38850
  if (notif.type) {
38802
38851
  Object.assign(notif, notifTypes[ notif.type ]);
38803
38852
  }
@@ -39121,7 +39170,11 @@
39121
39170
  if (meta.hasMedia === true) {
39122
39171
  if (notif.spinner !== false) {
39123
39172
  mainChild.push(
39124
- 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
+ })
39125
39178
  );
39126
39179
  }
39127
39180
  else if (notif.icon) {
@@ -39129,6 +39182,8 @@
39129
39182
  vue.h(QIcon, {
39130
39183
  class: 'q-notification__icon q-notification__icon--' + meta.leftClass,
39131
39184
  name: notif.icon,
39185
+ color: notif.iconColor,
39186
+ size: notif.iconSize,
39132
39187
  role: 'img'
39133
39188
  })
39134
39189
  );
@@ -39209,12 +39264,12 @@
39209
39264
  var Notify = {
39210
39265
  setDefaults (opts) {
39211
39266
  {
39212
- opts === Object(opts) && Object.assign(defaults, opts);
39267
+ isObject(opts) === true && Object.assign(defaults, opts);
39213
39268
  }
39214
39269
  },
39215
39270
 
39216
39271
  registerType (typeName, typeOpts) {
39217
- if (typeOpts === Object(typeOpts)) {
39272
+ if (isObject(typeOpts) === true) {
39218
39273
  notifTypes[ typeName ] = typeOpts;
39219
39274
  }
39220
39275
  },
@@ -39248,10 +39303,10 @@
39248
39303
  };
39249
39304
 
39250
39305
  function encode (value) {
39251
- if (Object.prototype.toString.call(value) === '[object Date]') {
39306
+ if (isDate(value) === true) {
39252
39307
  return '__q_date|' + value.toUTCString()
39253
39308
  }
39254
- if (Object.prototype.toString.call(value) === '[object RegExp]') {
39309
+ if (isRegexp(value) === true) {
39255
39310
  return '__q_expr|' + value.source
39256
39311
  }
39257
39312
  if (typeof value === 'number') {
@@ -39518,7 +39573,7 @@
39518
39573
  });
39519
39574
 
39520
39575
  var index_umd = {
39521
- version: '2.5.3',
39576
+ version: '2.6.0',
39522
39577
  install (app, opts) {
39523
39578
  installQuasar(app, {
39524
39579
  components,