quasar 2.5.5 → 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 (171) hide show
  1. package/README.md +1 -1
  2. package/dist/api/Dialog.json +9 -2
  3. package/dist/api/QKnob.json +5 -0
  4. package/dist/api/QSelect.json +8 -9
  5. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  6. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  7. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  8. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  9. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +6 -0
  10. package/dist/icon-set/fontawesome-v6.umd.prod.js +6 -0
  11. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  12. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  13. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  14. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  15. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  16. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  17. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  18. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  19. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  20. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  21. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +2 -2
  22. package/dist/icon-set/svg-eva-icons.umd.prod.js +2 -2
  23. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +2 -2
  24. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +6 -0
  25. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  26. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +2 -2
  28. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-mdi-v4.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-mdi-v5.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-mdi-v6.umd.prod.js +2 -2
  36. package/dist/icon-set/svg-themify.umd.prod.js +2 -2
  37. package/dist/icon-set/themify.umd.prod.js +1 -1
  38. package/dist/lang/ar.umd.prod.js +1 -1
  39. package/dist/lang/az-Latn.umd.prod.js +1 -1
  40. package/dist/lang/bg.umd.prod.js +1 -1
  41. package/dist/lang/bn.umd.prod.js +1 -1
  42. package/dist/lang/ca.umd.prod.js +1 -1
  43. package/dist/lang/cs.umd.prod.js +1 -1
  44. package/dist/lang/da.umd.prod.js +1 -1
  45. package/dist/lang/de.umd.prod.js +1 -1
  46. package/dist/lang/el.umd.prod.js +1 -1
  47. package/dist/lang/en-GB.umd.prod.js +1 -1
  48. package/dist/lang/en-US.umd.prod.js +1 -1
  49. package/dist/lang/eo.umd.prod.js +1 -1
  50. package/dist/lang/es.umd.prod.js +1 -1
  51. package/dist/lang/et.umd.prod.js +1 -1
  52. package/dist/lang/eu.umd.prod.js +6 -0
  53. package/dist/lang/fa-IR.umd.prod.js +1 -1
  54. package/dist/lang/fa.umd.prod.js +1 -1
  55. package/dist/lang/fi.umd.prod.js +1 -1
  56. package/dist/lang/fr.umd.prod.js +1 -1
  57. package/dist/lang/gn.umd.prod.js +1 -1
  58. package/dist/lang/he.umd.prod.js +1 -1
  59. package/dist/lang/hr.umd.prod.js +1 -1
  60. package/dist/lang/hu.umd.prod.js +1 -1
  61. package/dist/lang/id.umd.prod.js +1 -1
  62. package/dist/lang/is.umd.prod.js +1 -1
  63. package/dist/lang/it.umd.prod.js +1 -1
  64. package/dist/lang/ja.umd.prod.js +1 -1
  65. package/dist/lang/km.umd.prod.js +1 -1
  66. package/dist/lang/ko-KR.umd.prod.js +1 -1
  67. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  68. package/dist/lang/kz.umd.prod.js +6 -0
  69. package/dist/lang/lt.umd.prod.js +1 -1
  70. package/dist/lang/lu.umd.prod.js +1 -1
  71. package/dist/lang/lv.umd.prod.js +1 -1
  72. package/dist/lang/ml.umd.prod.js +1 -1
  73. package/dist/lang/ms.umd.prod.js +1 -1
  74. package/dist/lang/my.umd.prod.js +1 -1
  75. package/dist/lang/nb-NO.umd.prod.js +1 -1
  76. package/dist/lang/nl.umd.prod.js +1 -1
  77. package/dist/lang/pl.umd.prod.js +1 -1
  78. package/dist/lang/pt-BR.umd.prod.js +1 -1
  79. package/dist/lang/pt.umd.prod.js +1 -1
  80. package/dist/lang/ro.umd.prod.js +1 -1
  81. package/dist/lang/ru.umd.prod.js +1 -1
  82. package/dist/lang/sk.umd.prod.js +1 -1
  83. package/dist/lang/sl.umd.prod.js +1 -1
  84. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  85. package/dist/lang/sr.umd.prod.js +1 -1
  86. package/dist/lang/sv.umd.prod.js +1 -1
  87. package/dist/lang/ta.umd.prod.js +1 -1
  88. package/dist/lang/th.umd.prod.js +1 -1
  89. package/dist/lang/tr.umd.prod.js +1 -1
  90. package/dist/lang/ug.umd.prod.js +2 -2
  91. package/dist/lang/uk.umd.prod.js +1 -1
  92. package/dist/lang/vi.umd.prod.js +1 -1
  93. package/dist/lang/zh-CN.umd.prod.js +1 -1
  94. package/dist/lang/zh-TW.umd.prod.js +1 -1
  95. package/dist/quasar.cjs.prod.js +2 -2
  96. package/dist/quasar.css +2 -4
  97. package/dist/quasar.esm.prod.js +2 -2
  98. package/dist/quasar.prod.css +1 -1
  99. package/dist/quasar.rtl.css +2 -4
  100. package/dist/quasar.rtl.prod.css +1 -1
  101. package/dist/quasar.sass +2 -1
  102. package/dist/quasar.umd.js +277 -235
  103. package/dist/quasar.umd.prod.js +2 -2
  104. package/dist/types/extras/icon-set.d.ts +3 -0
  105. package/dist/types/globals.d.ts +2 -2
  106. package/dist/types/index.d.ts +11 -3
  107. package/dist/vetur/quasar-attributes.json +4 -0
  108. package/dist/vetur/quasar-tags.json +1 -0
  109. package/dist/web-types/web-types.json +11 -1
  110. package/icon-set/fontawesome-v6-pro.js +128 -0
  111. package/icon-set/fontawesome-v6.js +128 -0
  112. package/icon-set/svg-fontawesome-v6.js +198 -0
  113. package/lang/eu.js +91 -0
  114. package/lang/index.json +8 -0
  115. package/lang/kz.js +95 -0
  116. package/lang/ug.js +49 -50
  117. package/package.json +1 -1
  118. package/src/components/btn/QBtn.js +16 -14
  119. package/src/components/btn/use-btn.js +7 -7
  120. package/src/components/date/QDate.js +2 -2
  121. package/src/components/dialog/QDialog.js +11 -11
  122. package/src/components/dialog-bottom-sheet/BottomSheet.js +11 -11
  123. package/src/components/dialog-plugin/DialogPlugin.js +6 -6
  124. package/src/components/editor/QEditor.js +10 -10
  125. package/src/components/editor/editor-utils.js +2 -2
  126. package/src/components/file/QFile.js +2 -1
  127. package/src/components/icon/QIcon.js +2 -1
  128. package/src/components/infinite-scroll/QInfiniteScroll.js +3 -1
  129. package/src/components/inner-loading/QInnerLoading.js +7 -7
  130. package/src/components/input/QInput.js +4 -1
  131. package/src/components/knob/QKnob.js +5 -2
  132. package/src/components/knob/QKnob.json +6 -0
  133. package/src/components/linear-progress/QLinearProgress.sass +1 -0
  134. package/src/components/menu/QMenu.js +13 -13
  135. package/src/components/page-scroller/QPageScroller.js +4 -4
  136. package/src/components/pull-to-refresh/QPullToRefresh.js +5 -5
  137. package/src/components/select/QSelect.js +13 -7
  138. package/src/components/select/QSelect.json +4 -7
  139. package/src/components/slider/use-slider.js +4 -4
  140. package/src/components/stepper/QStep.js +6 -6
  141. package/src/components/table/table-column-selection.js +6 -6
  142. package/src/components/table/table-sort.js +2 -2
  143. package/src/components/tabs/QTabs.js +4 -4
  144. package/src/components/tooltip/QTooltip.js +12 -12
  145. package/src/components/uploader/uploader-core.js +11 -10
  146. package/src/components/virtual-scroll/QVirtualScroll.js +3 -3
  147. package/src/components/virtual-scroll/use-virtual-scroll.js +20 -20
  148. package/src/composables/private/use-field.js +25 -17
  149. package/src/composables/private/use-file-dom-props.js +5 -5
  150. package/src/composables/private/use-file.js +15 -12
  151. package/src/composables/private/use-router-link.js +2 -2
  152. package/src/directives/Morph.js +12 -3
  153. package/src/install-quasar.js +3 -3
  154. package/src/plugins/AddressbarColor.js +7 -7
  155. package/src/plugins/Cookies.js +5 -1
  156. package/src/plugins/Dialog.json +3 -2
  157. package/src/plugins/Loading.js +3 -3
  158. package/src/plugins/LoadingBar.js +12 -6
  159. package/src/plugins/Notify.js +4 -4
  160. package/src/utils/create-meta-mixin.js +4 -4
  161. package/src/utils/create-uploader-component.js +2 -2
  162. package/src/utils/event.js +3 -3
  163. package/src/utils/extend.js +3 -3
  164. package/src/utils/morph.js +2 -2
  165. package/src/utils/private/is.js +4 -2
  166. package/src/utils/private/noop-ssr-directive-transform.js +1 -1
  167. package/wrappers/index.js +33 -5
  168. package/wrappers/index.mjs +63 -0
  169. package/dist/ssr-directives/Morph.js +0 -55
  170. package/dist/ssr-directives/index.js +0 -14
  171. 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.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);
@@ -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.0' };
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-(brand|regular|solid)/;
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
 
@@ -12783,7 +12788,7 @@
12783
12788
  const rangeModel = vue.computed(() => {
12784
12789
  const fn = date => decodeString(date, innerMask.value, innerLocale.value);
12785
12790
  return normalizedModel.value
12786
- .filter(date => isPlainObject(date) === true && date.from !== void 0 && date.to !== void 0)
12791
+ .filter(date => isObject(date) === true && date.from !== void 0 && date.to !== void 0)
12787
12792
  .map(range => ({ from: fn(range.from), to: fn(range.to) }))
12788
12793
  .filter(range => range.from.dateHash !== null && range.to.dateHash !== null && range.from.dateHash < range.to.dateHash)
12789
12794
  });
@@ -14683,11 +14688,11 @@
14683
14688
  }, () => (
14684
14689
  useBackdrop.value === true
14685
14690
  ? vue.h('div', {
14686
- class: 'q-dialog__backdrop fixed-full',
14687
- style: transitionStyle.value,
14688
- 'aria-hidden': 'true',
14689
- onMousedown: onBackdropClick
14690
- })
14691
+ class: 'q-dialog__backdrop fixed-full',
14692
+ style: transitionStyle.value,
14693
+ 'aria-hidden': 'true',
14694
+ onMousedown: onBackdropClick
14695
+ })
14691
14696
  : null
14692
14697
  )),
14693
14698
 
@@ -14697,12 +14702,12 @@
14697
14702
  () => (
14698
14703
  showing.value === true
14699
14704
  ? vue.h('div', {
14700
- ref: innerRef,
14701
- class: classes.value,
14702
- style: transitionStyle.value,
14703
- tabindex: -1,
14704
- ...onEvents.value
14705
- }, hSlot(slots.default))
14705
+ ref: innerRef,
14706
+ class: classes.value,
14707
+ style: transitionStyle.value,
14708
+ tabindex: -1,
14709
+ ...onEvents.value
14710
+ }, hSlot(slots.default))
14706
14711
  : null
14707
14712
  )
14708
14713
  )
@@ -16023,18 +16028,18 @@
16023
16028
  function getTooltipContent () {
16024
16029
  return showing.value === true
16025
16030
  ? 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))
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))
16038
16043
  : null
16039
16044
  }
16040
16045
 
@@ -16249,8 +16254,8 @@
16249
16254
  if (btn.tip && eVm.$q.platform.is.desktop) {
16250
16255
  const Key = btn.key
16251
16256
  ? vue.h('div', [
16252
- vue.h('small', `(CTRL + ${ String.fromCharCode(btn.key) })`)
16253
- ])
16257
+ vue.h('small', `(CTRL + ${ String.fromCharCode(btn.key) })`)
16258
+ ])
16254
16259
  : null;
16255
16260
  child.push(
16256
16261
  vue.h(QTooltip, { delay: 1000 }, () => [
@@ -16569,13 +16574,13 @@
16569
16574
  continue
16570
16575
  }
16571
16576
 
16572
- if (deep && copy && (isPlainObject(copy) === true || (copyIsArray = Array.isArray(copy) === true))) {
16577
+ if (deep && copy && (isObject(copy) === true || (copyIsArray = Array.isArray(copy) === true))) {
16573
16578
  if (copyIsArray) {
16574
16579
  copyIsArray = false;
16575
16580
  clone = src && Array.isArray(src) === true ? src : [];
16576
16581
  }
16577
16582
  else {
16578
- clone = src && isPlainObject(src) === true ? src : {};
16583
+ clone = src && isObject(src) === true ? src : {};
16579
16584
  }
16580
16585
 
16581
16586
  target[ name ] = extend(deep, clone, copy);
@@ -16757,17 +16762,17 @@
16757
16762
  const userDef = props.definitions || {};
16758
16763
  const def = props.definitions || props.fonts
16759
16764
  ? 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
- )
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
16770
16774
  )
16775
+ )
16771
16776
  : buttonDef.value;
16772
16777
 
16773
16778
  return props.toolbar.map(
@@ -18440,18 +18445,20 @@
18440
18445
  }) {
18441
18446
  const { props, emit, proxy } = vue.getCurrentInstance();
18442
18447
 
18448
+ const dndRef = vue.ref(null);
18449
+
18443
18450
  const extensions = vue.computed(() => (
18444
18451
  props.accept !== void 0
18445
18452
  ? 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
- })
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
+ })
18455
18462
  : null
18456
18463
  ));
18457
18464
 
@@ -18516,7 +18523,7 @@
18516
18523
  // Cordova/iOS allows selecting multiple files even when the
18517
18524
  // multiple attribute is not specified. We also normalize drag'n'dropped
18518
18525
  // files here:
18519
- if (props.multiple !== true) {
18526
+ if (props.multiple !== true && files.length > 0) {
18520
18527
  files = [ files[ 0 ] ];
18521
18528
  }
18522
18529
 
@@ -18581,7 +18588,7 @@
18581
18588
 
18582
18589
  function onDragleave (e) {
18583
18590
  stopAndPrevent(e);
18584
- dnd.value = false;
18591
+ e.relatedTarget !== dndRef.value && (dnd.value = false);
18585
18592
  }
18586
18593
 
18587
18594
  function onDrop (e) {
@@ -18598,6 +18605,7 @@
18598
18605
  function getDndNode (type) {
18599
18606
  if (dnd.value === true) {
18600
18607
  return vue.h('div', {
18608
+ ref: dndRef,
18601
18609
  class: `q-${ type }__dnd absolute-full`,
18602
18610
  onDragenter: stopAndPreventDrag,
18603
18611
  onDragover: stopAndPreventDrag,
@@ -18717,6 +18725,7 @@
18717
18725
  pickFiles,
18718
18726
  addFiles,
18719
18727
  onDragover,
18728
+ onDragleave,
18720
18729
  processFiles,
18721
18730
  getDndNode,
18722
18731
  maxFilesNumber,
@@ -18996,10 +19005,10 @@
18996
19005
  }, [
18997
19006
  file.__status === 'failed'
18998
19007
  ? vue.h(QIcon, {
18999
- class: 'q-uploader__file-status',
19000
- name: $q.iconSet.type.negative,
19001
- color: 'negative'
19002
- })
19008
+ class: 'q-uploader__file-status',
19009
+ name: $q.iconSet.type.negative,
19010
+ color: 'negative'
19011
+ })
19003
19012
  : null,
19004
19013
 
19005
19014
  vue.h('div', { class: 'q-uploader__file-header-content col' }, [
@@ -19013,11 +19022,11 @@
19013
19022
 
19014
19023
  file.__status === 'uploading'
19015
19024
  ? vue.h(QCircularProgress, {
19016
- value: file.__progress,
19017
- min: 0,
19018
- max: 1,
19019
- indeterminate: file.__progress === 0
19020
- })
19025
+ value: file.__progress,
19026
+ min: 0,
19027
+ max: 1,
19028
+ indeterminate: file.__progress === 0
19029
+ })
19021
19030
  : vue.h(QBtn, {
19022
19031
  round: true,
19023
19032
  dense: true,
@@ -19086,7 +19095,7 @@
19086
19095
  const data = { ref: rootRef, class: classes.value };
19087
19096
 
19088
19097
  if (canAddFiles.value === true) {
19089
- data.onDragover = onDragover;
19098
+ Object.assign(data, { onDragover, onDragleave });
19090
19099
  }
19091
19100
 
19092
19101
  return vue.h('div', data, children)
@@ -19115,7 +19124,7 @@
19115
19124
  ...props
19116
19125
  },
19117
19126
 
19118
- emits: isPlainObject(emits) === true
19127
+ emits: isObject(emits) === true
19119
19128
  ? { ...coreEmitsObject, ...emits }
19120
19129
  : [ ...coreEmits, ...emits ],
19121
19130
 
@@ -19669,7 +19678,7 @@
19669
19678
  if (typeof options.style === 'string') {
19670
19679
  elTo.style.cssText += ' ' + options.style;
19671
19680
  }
19672
- else if (isPlainObject(options.style) === true) {
19681
+ else if (isObject(options.style) === true) {
19673
19682
  for (const prop in options.style) {
19674
19683
  elTo.style[ prop ] = options.style[ prop ];
19675
19684
  }
@@ -20864,14 +20873,6 @@
20864
20873
  }, getControlContainer())
20865
20874
  );
20866
20875
 
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
20876
  hasError.value === true && props.noErrorIcon === false && node.push(
20876
20877
  getInnerAppendNode('error', [
20877
20878
  vue.h(QIcon, { name: $q.iconSet.field.error, color: 'negative' })
@@ -20905,6 +20906,14 @@
20905
20906
  );
20906
20907
  }
20907
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
+
20908
20917
  state.getInnerAppend !== void 0 && node.push(
20909
20918
  getInnerAppendNode('inner-append', state.getInnerAppend())
20910
20919
  );
@@ -21009,8 +21018,8 @@
21009
21018
 
21010
21019
  hasCounter === true
21011
21020
  ? vue.h('div', {
21012
- class: 'q-field__counter'
21013
- }, slots.counter !== void 0 ? slots.counter() : state.computedCounter.value)
21021
+ class: 'q-field__counter'
21022
+ }, slots.counter !== void 0 ? slots.counter() : state.computedCounter.value)
21014
21023
  : null
21015
21024
  ])
21016
21025
  }
@@ -21050,6 +21059,14 @@
21050
21059
  });
21051
21060
 
21052
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
+
21053
21070
  return vue.h('label', {
21054
21071
  ref: state.rootRef,
21055
21072
  class: [
@@ -21057,13 +21074,13 @@
21057
21074
  attrs.class
21058
21075
  ],
21059
21076
  style: attrs.style,
21060
- ...attributes.value
21077
+ ...labelAttrs
21061
21078
  }, [
21062
21079
  slots.before !== void 0
21063
21080
  ? vue.h('div', {
21064
- class: 'q-field__before q-field__marginal row no-wrap items-center',
21065
- onClick: prevent
21066
- }, slots.before())
21081
+ class: 'q-field__before q-field__marginal row no-wrap items-center',
21082
+ onClick: prevent
21083
+ }, slots.before())
21067
21084
  : null,
21068
21085
 
21069
21086
  vue.h('div', {
@@ -21083,9 +21100,9 @@
21083
21100
 
21084
21101
  slots.after !== void 0
21085
21102
  ? vue.h('div', {
21086
- class: 'q-field__after q-field__marginal row no-wrap items-center',
21087
- onClick: prevent
21088
- }, slots.after())
21103
+ class: 'q-field__after q-field__marginal row no-wrap items-center',
21104
+ onClick: prevent
21105
+ }, slots.after())
21089
21106
  : null
21090
21107
  ])
21091
21108
  }
@@ -21139,12 +21156,12 @@
21139
21156
 
21140
21157
  return typeGuard === true
21141
21158
  ? vue.computed(() => {
21142
- if (props.type !== 'file') {
21143
- return
21144
- }
21159
+ if (props.type !== 'file') {
21160
+ return
21161
+ }
21145
21162
 
21146
- return getFormDomProps()
21147
- })
21163
+ return getFormDomProps()
21164
+ })
21148
21165
  : vue.computed(getFormDomProps)
21149
21166
  }
21150
21167
 
@@ -21193,6 +21210,7 @@
21193
21210
  const {
21194
21211
  pickFiles,
21195
21212
  onDragover,
21213
+ onDragleave,
21196
21214
  processFiles,
21197
21215
  getDndNode
21198
21216
  } = useFile({ editable: state.editable, dnd, getFileInput, addFilesToQueue });
@@ -21398,7 +21416,7 @@
21398
21416
  };
21399
21417
 
21400
21418
  if (state.editable.value === true) {
21401
- Object.assign(data, { onDragover, onKeydown, onKeyup });
21419
+ Object.assign(data, { onDragover, onDragleave, onKeydown, onKeyup });
21402
21420
  }
21403
21421
 
21404
21422
  return vue.h('div', data, [ getInput() ].concat(getSelection()))
@@ -22411,7 +22429,9 @@
22411
22429
  isWorking.value = false;
22412
22430
  isFetching.value = false;
22413
22431
  localScrollTarget.removeEventListener('scroll', poll, passive$3);
22414
- poll !== void 0 && poll.cancel();
22432
+ if (poll !== void 0 && poll.cancel !== void 0) {
22433
+ poll.cancel();
22434
+ }
22415
22435
  }
22416
22436
  }
22417
22437
 
@@ -22556,7 +22576,7 @@
22556
22576
 
22557
22577
  const labelClass = vue.computed(() =>
22558
22578
  'q-inner-loading__label'
22559
- + (props.labelClass !== void 0 ? ` ${ props.labelClass}` : '')
22579
+ + (props.labelClass !== void 0 ? ` ${ props.labelClass }` : '')
22560
22580
  );
22561
22581
 
22562
22582
  function getInner () {
@@ -22582,12 +22602,12 @@
22582
22602
  function getContent () {
22583
22603
  return props.showing === true
22584
22604
  ? vue.h(
22585
- 'div',
22586
- { class: classes.value, style: transitionStyle.value },
22587
- slots.default !== void 0
22588
- ? slots.default()
22589
- : getInner()
22590
- )
22605
+ 'div',
22606
+ { class: classes.value, style: transitionStyle.value },
22607
+ slots.default !== void 0
22608
+ ? slots.default()
22609
+ : getInner()
22610
+ )
22591
22611
  : null
22592
22612
  }
22593
22613
 
@@ -23293,7 +23313,10 @@
23293
23313
  if (hasMask.value === true) {
23294
23314
  if (stopValueWatcher === true) {
23295
23315
  stopValueWatcher = false;
23296
- return
23316
+
23317
+ if (String(v) === emitCachedValue) {
23318
+ return
23319
+ }
23297
23320
  }
23298
23321
 
23299
23322
  updateMaskValue(v);
@@ -23964,11 +23987,14 @@
23964
23987
  angle = centerPosition.left < pos.left ? angle + 90 : 270 - angle;
23965
23988
  }
23966
23989
 
23967
- if (props.angle) {
23990
+ if ($q.lang.rtl === true) {
23991
+ angle = normalizeToInterval(-angle - props.angle, 0, 360);
23992
+ }
23993
+ else if (props.angle) {
23968
23994
  angle = normalizeToInterval(angle - props.angle, 0, 360);
23969
23995
  }
23970
23996
 
23971
- if ($q.lang.rtl === true) {
23997
+ if (props.reverse === true) {
23972
23998
  angle = 360 - angle;
23973
23999
  }
23974
24000
 
@@ -25154,10 +25180,10 @@
25154
25180
  function getContent () {
25155
25181
  return showing.value === true
25156
25182
  ? vue.h('div', {
25157
- ref: rootRef,
25158
- class: 'q-page-scroller',
25159
- onClick
25160
- }, getStickyContent(slots))
25183
+ ref: rootRef,
25184
+ class: 'q-page-scroller',
25185
+ onClick
25186
+ }, getStickyContent(slots))
25161
25187
  : null
25162
25188
  }
25163
25189
 
@@ -26166,7 +26192,7 @@
26166
26192
  }
26167
26193
 
26168
26194
  if (event.isFirst === true) {
26169
- if (getVerticalScrollPosition(localScrollTarget) !== 0 || event.direction !== "down") {
26195
+ if (getVerticalScrollPosition(localScrollTarget) !== 0 || event.direction !== 'down') {
26170
26196
  if (pulling.value === true) {
26171
26197
  pulling.value = false;
26172
26198
  state.value = 'pull';
@@ -26279,10 +26305,10 @@
26279
26305
  }, [
26280
26306
  state.value !== 'refreshing'
26281
26307
  ? vue.h(QIcon, {
26282
- name: props.icon || $q.iconSet.pullToRefresh.icon,
26283
- color: props.color,
26284
- size: '32px'
26285
- })
26308
+ name: props.icon || $q.iconSet.pullToRefresh.icon,
26309
+ color: props.color,
26310
+ size: '32px'
26311
+ })
26286
26312
  : vue.h(QSpinner, {
26287
26313
  size: '24px',
26288
26314
  color: props.color
@@ -28008,17 +28034,17 @@
28008
28034
  return [
28009
28035
  tag === 'tbody'
28010
28036
  ? 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
- ])
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
+ })
28021
28046
  ])
28047
+ ])
28022
28048
  : vue.h(tag, {
28023
28049
  class: 'q-virtual-scroll__padding',
28024
28050
  key: 'before',
@@ -28036,17 +28062,17 @@
28036
28062
 
28037
28063
  tag === 'tbody'
28038
28064
  ? 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
- ])
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
+ })
28049
28074
  ])
28075
+ ])
28050
28076
  : vue.h(tag, {
28051
28077
  class: 'q-virtual-scroll__padding',
28052
28078
  key: 'after',
@@ -28707,7 +28733,7 @@
28707
28733
 
28708
28734
  return typeof val === 'function'
28709
28735
  ? val
28710
- : opt => (isPlainObject(opt) === true && val in opt ? opt[ val ] : opt)
28736
+ : opt => (opt !== null && typeof opt === 'object' && val in opt ? opt[ val ] : opt)
28711
28737
  }
28712
28738
 
28713
28739
  function isOptionSelected (opt) {
@@ -29080,6 +29106,8 @@
29080
29106
  }
29081
29107
 
29082
29108
  function getInput (fromDialog, isTarget) {
29109
+ const attrs = isTarget === true ? { ...comboboxAttrs.value, ...state.splitAttrs.attributes.value } : void 0;
29110
+
29083
29111
  const data = {
29084
29112
  ref: isTarget === true ? targetRef : void 0,
29085
29113
  key: 'i_t',
@@ -29088,8 +29116,7 @@
29088
29116
  value: inputValue.value !== void 0 ? inputValue.value : '',
29089
29117
  // required for Android in order to show ENTER key when in form
29090
29118
  type: 'search',
29091
- ...comboboxAttrs.value,
29092
- ...state.splitAttrs.attributes.value,
29119
+ ...attrs,
29093
29120
  id: isTarget === true ? state.targetUid.value : void 0,
29094
29121
  maxlength: props.maxlength,
29095
29122
  autocomplete: props.autocomplete,
@@ -29569,13 +29596,16 @@
29569
29596
  }
29570
29597
  // there can be only one (when dialog is opened the control in dialog should be target)
29571
29598
  else if (state.editable.value === true) {
29599
+ const attrs = isTarget === true ? comboboxAttrs.value : void 0;
29600
+
29572
29601
  child.push(
29573
- vue.h('div', {
29602
+ vue.h('input', {
29574
29603
  ref: isTarget === true ? targetRef : void 0,
29575
29604
  key: 'd_t',
29576
29605
  class: 'q-select__focus-target',
29577
29606
  id: isTarget === true ? state.targetUid.value : void 0,
29578
- ...comboboxAttrs.value,
29607
+ readonly: true,
29608
+ ...attrs,
29579
29609
  onKeydown: onTargetKeydown,
29580
29610
  onKeyup: onTargetKeyup,
29581
29611
  onKeypress: onTargetKeypress
@@ -29605,9 +29635,11 @@
29605
29635
  );
29606
29636
  }
29607
29637
 
29638
+ const attrs = props.useInput === true || isTarget !== true ? void 0 : state.splitAttrs.attributes.value;
29639
+
29608
29640
  return vue.h('div', {
29609
29641
  class: 'q-field__native row items-center',
29610
- ...state.splitAttrs.attributes.value
29642
+ ...attrs
29611
29643
  }, child)
29612
29644
  },
29613
29645
 
@@ -32325,14 +32357,14 @@
32325
32357
  || $stepper.value.vertical !== true
32326
32358
  ? {}
32327
32359
  : {
32328
- onScroll (e) {
32329
- const { target } = e;
32330
- if (target.scrollTop > 0) {
32331
- 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);
32332
32366
  }
32333
- attrs.onScroll !== void 0 && attrs.onScroll(e);
32334
32367
  }
32335
- }
32336
32368
  ));
32337
32369
 
32338
32370
  const contentKey = vue.computed(() => (
@@ -32726,9 +32758,9 @@
32726
32758
 
32727
32759
  return props.type === '__qtable'
32728
32760
  ? getTableMiddle(
32729
- { ref: rootRef, class: 'q-table__middle ' + classes.value },
32730
- __getVirtualChildren()
32731
- )
32761
+ { ref: rootRef, class: 'q-table__middle ' + classes.value },
32762
+ __getVirtualChildren()
32763
+ )
32732
32764
  : vue.h(comps[ props.type ], {
32733
32765
  ...attrs,
32734
32766
  ref: rootRef,
@@ -32813,7 +32845,7 @@
32813
32845
  function sort (col /* String(col name) or Object(col definition) */) {
32814
32846
  let sortOrder = props.columnSortOrder;
32815
32847
 
32816
- if (isPlainObject(col) === true) {
32848
+ if (isObject(col) === true) {
32817
32849
  if (col.sortOrder) {
32818
32850
  sortOrder = col.sortOrder;
32819
32851
  }
@@ -33269,12 +33301,12 @@
33269
33301
 
33270
33302
  return row !== void 0
33271
33303
  ? 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
- }))
33304
+ name,
33305
+ label: name.toUpperCase(),
33306
+ field: name,
33307
+ align: isNumber(row[ name ]) ? 'right' : 'left',
33308
+ sortable: true
33309
+ }))
33278
33310
  : []
33279
33311
  });
33280
33312
 
@@ -37548,15 +37580,15 @@
37548
37580
  || client.is.webkit === true || client.is.vivaldi === true
37549
37581
  )
37550
37582
  ? hexColor => {
37551
- const val = hexColor || getCssVar('primary');
37583
+ const val = hexColor || getCssVar('primary');
37552
37584
 
37553
- if (client.is.nativeMobile === true && window.StatusBar) {
37554
- window.StatusBar.backgroundColorByHexString(val);
37555
- }
37556
- else {
37557
- setColor(val);
37558
- }
37585
+ if (client.is.nativeMobile === true && window.StatusBar) {
37586
+ window.StatusBar.backgroundColorByHexString(val);
37587
+ }
37588
+ else {
37589
+ setColor(val);
37559
37590
  }
37591
+ }
37560
37592
  : noop,
37561
37593
 
37562
37594
  install ({ $q }) {
@@ -37763,9 +37795,9 @@
37763
37795
 
37764
37796
  return action.label === void 0
37765
37797
  ? vue.h(QSeparator, {
37766
- class: 'col-all',
37767
- dark: isDark.value
37768
- })
37798
+ class: 'col-all',
37799
+ dark: isDark.value
37800
+ })
37769
37801
  : vue.h('div', {
37770
37802
  class: [
37771
37803
  'q-bottom-sheet__item q-hoverable q-focusable cursor-pointer relative-position',
@@ -37782,9 +37814,9 @@
37782
37814
  : (
37783
37815
  img
37784
37816
  ? vue.h('img', {
37785
- class: action.avatar ? 'q-bottom-sheet__avatar' : '',
37786
- src: img
37787
- })
37817
+ class: action.avatar ? 'q-bottom-sheet__avatar' : '',
37818
+ src: img
37819
+ })
37788
37820
  : vue.h('div', { class: 'q-bottom-sheet__empty-icon' })
37789
37821
  ),
37790
37822
 
@@ -37816,9 +37848,9 @@
37816
37848
  : (
37817
37849
  img
37818
37850
  ? vue.h('img', {
37819
- class: action.avatar ? 'q-bottom-sheet__avatar' : '',
37820
- src: img
37821
- })
37851
+ class: action.avatar ? 'q-bottom-sheet__avatar' : '',
37852
+ src: img
37853
+ })
37822
37854
  : null
37823
37855
  )
37824
37856
  )
@@ -37847,8 +37879,8 @@
37847
37879
  child.push(
37848
37880
  props.grid === true
37849
37881
  ? vue.h('div', {
37850
- class: 'row items-stretch justify-start'
37851
- }, getGrid())
37882
+ class: 'row items-stretch justify-start'
37883
+ }, getGrid())
37852
37884
  : vue.h('div', getList())
37853
37885
  );
37854
37886
 
@@ -38064,7 +38096,11 @@
38064
38096
  string = decode$1(string.replace(/\+/g, ' '));
38065
38097
 
38066
38098
  try {
38067
- string = JSON.parse(string);
38099
+ const parsed = JSON.parse(string);
38100
+
38101
+ if (parsed === Object(parsed) || Array.isArray(parsed) === true) {
38102
+ string = parsed;
38103
+ }
38068
38104
  }
38069
38105
  catch (e) {}
38070
38106
 
@@ -38291,7 +38327,7 @@
38291
38327
  props.progress === false
38292
38328
  ? null
38293
38329
  : (
38294
- isPlainObject(props.progress) === true
38330
+ isObject(props.progress) === true
38295
38331
  ? {
38296
38332
  component: props.progress.spinner || QSpinner,
38297
38333
  props: { color: props.progress.color || vmColor.value }
@@ -38320,7 +38356,7 @@
38320
38356
  });
38321
38357
 
38322
38358
  const okLabel = vue.computed(() => (
38323
- isPlainObject(props.ok) === true
38359
+ isObject(props.ok) === true
38324
38360
  ? $q.lang.label.ok
38325
38361
  : (
38326
38362
  props.ok === true
@@ -38330,7 +38366,7 @@
38330
38366
  ));
38331
38367
 
38332
38368
  const cancelLabel = vue.computed(() => (
38333
- isPlainObject(props.cancel) === true
38369
+ isObject(props.cancel) === true
38334
38370
  ? $q.lang.label.cancel
38335
38371
  : (
38336
38372
  props.cancel === true
@@ -38356,7 +38392,7 @@
38356
38392
  label: okLabel.value,
38357
38393
  ripple: false,
38358
38394
  disable: okDisabled.value,
38359
- ...(isPlainObject(props.ok) === true ? props.ok : { flat: true }),
38395
+ ...(isObject(props.ok) === true ? props.ok : { flat: true }),
38360
38396
  'data-autofocus': (props.focus === 'ok' && hasForm.value !== true) || void 0,
38361
38397
  onClick: onOk
38362
38398
  }));
@@ -38365,7 +38401,7 @@
38365
38401
  color: vmColor.value,
38366
38402
  label: cancelLabel.value,
38367
38403
  ripple: false,
38368
- ...(isPlainObject(props.cancel) === true ? props.cancel : { flat: true }),
38404
+ ...(isObject(props.cancel) === true ? props.cancel : { flat: true }),
38369
38405
  'data-autofocus': (props.focus === 'cancel' && hasForm.value !== true) || void 0,
38370
38406
  onClick: onCancel
38371
38407
  }));
@@ -38569,6 +38605,14 @@
38569
38605
  : {}
38570
38606
  );
38571
38607
 
38608
+ function onStart () {
38609
+ Plugin$3.isActive = true;
38610
+ }
38611
+
38612
+ function onStop () {
38613
+ Plugin$3.isActive = false;
38614
+ }
38615
+
38572
38616
  const el = createGlobalNode('q-loading-bar');
38573
38617
 
38574
38618
  createChildApp({
@@ -38577,23 +38621,21 @@
38577
38621
  // hide App from Vue devtools
38578
38622
  devtools: { hide: true },
38579
38623
 
38580
- setup: () => () => vue.h(QAjaxBar, { ...props.value, ref: barRef })
38624
+ setup: () => () => vue.h(QAjaxBar, { ...props.value, onStart, onStop, ref: barRef })
38581
38625
  }, parentApp).mount(el);
38582
38626
 
38583
38627
  Object.assign(this, {
38584
38628
  start (speed) {
38585
38629
  barRef.value.start(speed);
38586
- Plugin$3.isActive = true;
38587
38630
  },
38588
38631
  stop () {
38589
- const sessions = barRef.value.stop();
38590
- Plugin$3.isActive = sessions > 0;
38632
+ barRef.value.stop();
38591
38633
  },
38592
38634
  increment () {
38593
38635
  barRef.value.increment.apply(null, arguments);
38594
38636
  },
38595
38637
  setDefaults (opts) {
38596
- if (isPlainObject(opts) === true) {
38638
+ if (isObject(opts) === true) {
38597
38639
  Object.assign(props.value, opts);
38598
38640
  }
38599
38641
  }
@@ -38628,7 +38670,7 @@
38628
38670
  }, {
38629
38671
  show (opts) {
38630
38672
 
38631
- props = isPlainObject(opts) === true && opts.ignoreDefaults === true
38673
+ props = isObject(opts) === true && opts.ignoreDefaults === true
38632
38674
  ? { ...originalDefaults, ...opts }
38633
38675
  : { ...defaults$1, ...opts };
38634
38676
 
@@ -38729,7 +38771,7 @@
38729
38771
 
38730
38772
  setDefaults (opts) {
38731
38773
  {
38732
- isPlainObject(opts) === true && Object.assign(defaults$1, opts);
38774
+ isObject(opts) === true && Object.assign(defaults$1, opts);
38733
38775
  }
38734
38776
  },
38735
38777
 
@@ -38804,7 +38846,7 @@
38804
38846
  Object.assign(notif, defaults);
38805
38847
  }
38806
38848
 
38807
- if (isPlainObject(config) === false) {
38849
+ if (isObject(config) === false) {
38808
38850
  if (notif.type) {
38809
38851
  Object.assign(notif, notifTypes[ notif.type ]);
38810
38852
  }
@@ -39222,12 +39264,12 @@
39222
39264
  var Notify = {
39223
39265
  setDefaults (opts) {
39224
39266
  {
39225
- isPlainObject(opts) === true && Object.assign(defaults, opts);
39267
+ isObject(opts) === true && Object.assign(defaults, opts);
39226
39268
  }
39227
39269
  },
39228
39270
 
39229
39271
  registerType (typeName, typeOpts) {
39230
- if (isPlainObject(typeOpts) === true) {
39272
+ if (isObject(typeOpts) === true) {
39231
39273
  notifTypes[ typeName ] = typeOpts;
39232
39274
  }
39233
39275
  },
@@ -39531,7 +39573,7 @@
39531
39573
  });
39532
39574
 
39533
39575
  var index_umd = {
39534
- version: '2.5.5',
39576
+ version: '2.6.0',
39535
39577
  install (app, opts) {
39536
39578
  installQuasar(app, {
39537
39579
  components,