quasar 1.19.4 → 1.20.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 (132) hide show
  1. package/dist/api/Loading.json +51 -1
  2. package/dist/api/QBtnDropdown.json +4 -0
  3. package/dist/api/QExpansionItem.json +11 -2
  4. package/dist/icon-set/bootstrap-icons.umd.min.js +1 -1
  5. package/dist/icon-set/eva-icons.umd.min.js +1 -1
  6. package/dist/icon-set/fontawesome-v5-pro.umd.min.js +1 -1
  7. package/dist/icon-set/fontawesome-v5.umd.min.js +1 -1
  8. package/dist/icon-set/fontawesome-v6-pro.umd.min.js +1 -1
  9. package/dist/icon-set/fontawesome-v6.umd.min.js +1 -1
  10. package/dist/icon-set/ionicons-v4.umd.min.js +1 -1
  11. package/dist/icon-set/line-awesome.umd.min.js +1 -1
  12. package/dist/icon-set/material-icons-outlined.umd.min.js +1 -1
  13. package/dist/icon-set/material-icons-round.umd.min.js +1 -1
  14. package/dist/icon-set/material-icons-sharp.umd.min.js +1 -1
  15. package/dist/icon-set/material-icons.umd.min.js +1 -1
  16. package/dist/icon-set/material-symbols-outlined.umd.min.js +1 -1
  17. package/dist/icon-set/material-symbols-rounded.umd.min.js +1 -1
  18. package/dist/icon-set/material-symbols-sharp.umd.min.js +1 -1
  19. package/dist/icon-set/mdi-v3.umd.min.js +1 -1
  20. package/dist/icon-set/mdi-v4.umd.min.js +1 -1
  21. package/dist/icon-set/mdi-v5.umd.min.js +1 -1
  22. package/dist/icon-set/mdi-v6.umd.min.js +1 -1
  23. package/dist/icon-set/svg-bootstrap-icons.umd.min.js +1 -1
  24. package/dist/icon-set/svg-eva-icons.umd.min.js +1 -1
  25. package/dist/icon-set/svg-fontawesome-v5.umd.min.js +1 -1
  26. package/dist/icon-set/svg-fontawesome-v6.umd.min.js +1 -1
  27. package/dist/icon-set/svg-ionicons-v4.umd.min.js +1 -1
  28. package/dist/icon-set/svg-ionicons-v5.umd.min.js +1 -1
  29. package/dist/icon-set/svg-ionicons-v6.umd.min.js +1 -1
  30. package/dist/icon-set/svg-line-awesome.umd.min.js +1 -1
  31. package/dist/icon-set/svg-material-icons-outlined.umd.min.js +1 -1
  32. package/dist/icon-set/svg-material-icons-round.umd.min.js +1 -1
  33. package/dist/icon-set/svg-material-icons-sharp.umd.min.js +1 -1
  34. package/dist/icon-set/svg-material-icons.umd.min.js +1 -1
  35. package/dist/icon-set/svg-material-symbols-outlined.umd.min.js +2 -2
  36. package/dist/icon-set/svg-material-symbols-rounded.umd.min.js +1 -1
  37. package/dist/icon-set/svg-material-symbols-sharp.umd.min.js +2 -2
  38. package/dist/icon-set/svg-mdi-v4.umd.min.js +1 -1
  39. package/dist/icon-set/svg-mdi-v5.umd.min.js +1 -1
  40. package/dist/icon-set/svg-mdi-v6.umd.min.js +1 -1
  41. package/dist/icon-set/svg-themify.umd.min.js +1 -1
  42. package/dist/icon-set/themify.umd.min.js +1 -1
  43. package/dist/lang/ar.umd.min.js +1 -1
  44. package/dist/lang/az-latn.umd.min.js +1 -1
  45. package/dist/lang/bg.umd.min.js +1 -1
  46. package/dist/lang/ca.umd.min.js +1 -1
  47. package/dist/lang/cs.umd.min.js +1 -1
  48. package/dist/lang/da.umd.min.js +1 -1
  49. package/dist/lang/de.umd.min.js +1 -1
  50. package/dist/lang/el.umd.min.js +1 -1
  51. package/dist/lang/en-gb.umd.min.js +1 -1
  52. package/dist/lang/en-us.umd.min.js +1 -1
  53. package/dist/lang/eo.umd.min.js +1 -1
  54. package/dist/lang/es.umd.min.js +1 -1
  55. package/dist/lang/et.umd.min.js +1 -1
  56. package/dist/lang/eu.umd.min.js +1 -1
  57. package/dist/lang/fa-ir.umd.min.js +1 -1
  58. package/dist/lang/fa.umd.min.js +1 -1
  59. package/dist/lang/fi.umd.min.js +1 -1
  60. package/dist/lang/fr.umd.min.js +1 -1
  61. package/dist/lang/gn.umd.min.js +1 -1
  62. package/dist/lang/he.umd.min.js +1 -1
  63. package/dist/lang/hr.umd.min.js +1 -1
  64. package/dist/lang/hu.umd.min.js +1 -1
  65. package/dist/lang/id.umd.min.js +1 -1
  66. package/dist/lang/is.umd.min.js +1 -1
  67. package/dist/lang/it.umd.min.js +1 -1
  68. package/dist/lang/ja.umd.min.js +1 -1
  69. package/dist/lang/km.umd.min.js +1 -1
  70. package/dist/lang/ko-kr.umd.min.js +1 -1
  71. package/dist/lang/kur-ckb.umd.min.js +1 -1
  72. package/dist/lang/kz.umd.min.js +1 -1
  73. package/dist/lang/lu.umd.min.js +1 -1
  74. package/dist/lang/lv.umd.min.js +1 -1
  75. package/dist/lang/ml.umd.min.js +1 -1
  76. package/dist/lang/mm.umd.min.js +1 -1
  77. package/dist/lang/ms.umd.min.js +1 -1
  78. package/dist/lang/my.umd.min.js +1 -1
  79. package/dist/lang/nb-no.umd.min.js +1 -1
  80. package/dist/lang/nl.umd.min.js +1 -1
  81. package/dist/lang/pl.umd.min.js +1 -1
  82. package/dist/lang/pt-br.umd.min.js +1 -1
  83. package/dist/lang/pt.umd.min.js +1 -1
  84. package/dist/lang/ro.umd.min.js +1 -1
  85. package/dist/lang/ru.umd.min.js +1 -1
  86. package/dist/lang/sk.umd.min.js +1 -1
  87. package/dist/lang/sl.umd.min.js +1 -1
  88. package/dist/lang/sm.umd.min.js +1 -1
  89. package/dist/lang/sr.umd.min.js +1 -1
  90. package/dist/lang/sv.umd.min.js +1 -1
  91. package/dist/lang/ta.umd.min.js +1 -1
  92. package/dist/lang/th.umd.min.js +1 -1
  93. package/dist/lang/tr.umd.min.js +1 -1
  94. package/dist/lang/ug.umd.min.js +1 -1
  95. package/dist/lang/uk.umd.min.js +1 -1
  96. package/dist/lang/uz-Cyrl.umd.min.js +1 -1
  97. package/dist/lang/uz-Latn.umd.min.js +1 -1
  98. package/dist/lang/vi.umd.min.js +1 -1
  99. package/dist/lang/zh-hans.umd.min.js +1 -1
  100. package/dist/lang/zh-hant.umd.min.js +1 -1
  101. package/dist/quasar.addon.css +1 -1
  102. package/dist/quasar.addon.rtl.css +1 -1
  103. package/dist/quasar.common.js +2 -2
  104. package/dist/quasar.css +4 -7
  105. package/dist/quasar.esm.js +2 -2
  106. package/dist/quasar.ie.polyfills.js +1 -1
  107. package/dist/quasar.ie.polyfills.umd.min.js +1 -1
  108. package/dist/quasar.min.css +1 -1
  109. package/dist/quasar.rtl.css +4 -7
  110. package/dist/quasar.rtl.min.css +1 -1
  111. package/dist/quasar.sass +1 -1
  112. package/dist/quasar.styl +1 -1
  113. package/dist/quasar.umd.js +225 -136
  114. package/dist/quasar.umd.min.js +2 -2
  115. package/dist/quasar.umd.modern.js +225 -137
  116. package/dist/quasar.umd.modern.min.js +2 -2
  117. package/dist/types/index.d.ts +12 -2
  118. package/dist/web-types/web-types.json +14 -1
  119. package/package.json +1 -1
  120. package/src/components/btn-dropdown/QBtnDropdown.js +8 -2
  121. package/src/components/btn-dropdown/QBtnDropdown.json +5 -0
  122. package/src/components/expansion-item/QExpansionItem.js +1 -1
  123. package/src/components/expansion-item/QExpansionItem.json +11 -2
  124. package/src/components/field/QField.js +3 -1
  125. package/src/components/file/QFile.js +5 -0
  126. package/src/components/range/QRange.js +5 -1
  127. package/src/components/select/QSelect.js +66 -50
  128. package/src/components/slider/QSlider.js +6 -2
  129. package/src/components/uploader/QUploaderBase.js +3 -3
  130. package/src/plugins/Loading.js +133 -83
  131. package/src/plugins/Loading.json +44 -1
  132. package/src/utils/patterns.js +1 -1
package/dist/quasar.sass CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v1.19.4
2
+ * Quasar Framework v1.20.0
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
package/dist/quasar.styl CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v1.19.4
2
+ * Quasar Framework v1.20.0
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v1.19.4
2
+ * Quasar Framework v1.20.0
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -12,7 +12,7 @@
12
12
 
13
13
  Vue = Vue && Object.prototype.hasOwnProperty.call(Vue, 'default') ? Vue['default'] : Vue;
14
14
 
15
- var version = "1.19.4";
15
+ var version = "1.20.0";
16
16
 
17
17
  /* eslint-disable no-useless-escape */
18
18
 
@@ -5852,7 +5852,10 @@
5852
5852
  click: function (e) {
5853
5853
  this$1.$emit('click', e);
5854
5854
  }
5855
- })
5855
+ }),
5856
+ scopedSlots: {
5857
+ loading: this.$scopedSlots.loading
5858
+ }
5856
5859
  }, label.concat(Arrow))
5857
5860
  }
5858
5861
 
@@ -5870,7 +5873,10 @@
5870
5873
  this$1.hide();
5871
5874
  this$1.$emit('click', e);
5872
5875
  }
5873
- })
5876
+ }),
5877
+ scopedSlots: {
5878
+ loading: this.$scopedSlots.loading
5879
+ }
5874
5880
  }, label);
5875
5881
 
5876
5882
  return h(QBtnGroup, {
@@ -8243,7 +8249,7 @@
8243
8249
  timeOrFulltime: function (v) { return /^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(v); },
8244
8250
 
8245
8251
  // -- RFC 5322 --
8246
- // -- Added in v2.6.6 --
8252
+ // -- Added in v1.18.10 --
8247
8253
  // This is a basic helper validation.
8248
8254
  // For something more complex (like RFC 822) you should write and use your own rule.
8249
8255
  // We won't be accepting PRs to enhance the one below because of the reason above.
@@ -9479,8 +9485,12 @@
9479
9485
  stopAndPrevent(evt);
9480
9486
 
9481
9487
  var
9482
- step = ([34, 33].includes(evt.keyCode) ? 10 : 1) * this.computedStep,
9483
- offset = ([ 34, 37, 40 ].includes(evt.keyCode) ? -1 : 1) * (this.isReversed === true ? -1 : 1) * step;
9488
+ stepVal = ([34, 33].includes(evt.keyCode) ? 10 : 1) * this.computedStep,
9489
+ offset = (
9490
+ ([ 34, 37, 40 ].includes(evt.keyCode) ? -1 : 1) *
9491
+ (this.isReversed === true ? -1 : 1) *
9492
+ (this.vertical === true ? -1 : 1) * stepVal
9493
+ );
9484
9494
 
9485
9495
  this.model = between(
9486
9496
  parseFloat((this.model + offset).toFixed(this.computedDecimals)),
@@ -17835,7 +17845,7 @@
17835
17845
  var child;
17836
17846
 
17837
17847
  if (this.$scopedSlots.header !== void 0) {
17838
- child = [].concat(this.$scopedSlots.header());
17848
+ child = [].concat(this.$scopedSlots.header({ expanded: this.showing === true }));
17839
17849
  }
17840
17850
  else {
17841
17851
  child = [
@@ -18702,6 +18712,7 @@
18702
18712
  floatingLabel: function floatingLabel () {
18703
18713
  return this.stackLabel === true ||
18704
18714
  this.focused === true ||
18715
+ typeof this.inputValue === 'number' ||
18705
18716
  (typeof this.inputValue === 'string' && this.inputValue.length > 0) ||
18706
18717
  (this.hideSelected !== true && this.hasValue === true) ||
18707
18718
  (
@@ -18988,7 +18999,8 @@
18988
18999
 
18989
19000
  return h('div', {
18990
19001
  staticClass: 'q-field__bottom row items-start q-field__bottom--' +
18991
- (this.hideBottomSpace !== true ? 'animated' : 'stale')
19002
+ (this.hideBottomSpace !== true ? 'animated' : 'stale'),
19003
+ on: { click: prevent }
18992
19004
  }, [
18993
19005
  this.hideBottomSpace === true
18994
19006
  ? main
@@ -19554,6 +19566,11 @@
19554
19566
  var this$1 = this;
19555
19567
 
19556
19568
  var files = this.__processFiles(e, fileList, this.innerValue, this.isAppending);
19569
+ var fileInput = this.__getFileInput();
19570
+
19571
+ if (fileInput !== void 0) {
19572
+ fileInput.value = '';
19573
+ }
19557
19574
 
19558
19575
  // if nothing to do...
19559
19576
  if (files === void 0) { return }
@@ -25298,7 +25315,11 @@
25298
25315
 
25299
25316
  var
25300
25317
  stepVal = ([ 34, 33 ].includes(evt.keyCode) ? 10 : 1) * this.computedStep,
25301
- offset = ([ 34, 37, 40 ].includes(evt.keyCode) ? -1 : 1) * (this.isReversed === true ? -1 : 1) * stepVal;
25318
+ offset = (
25319
+ ([ 34, 37, 40 ].includes(evt.keyCode) ? -1 : 1) *
25320
+ (this.isReversed === true ? -1 : 1) *
25321
+ (this.vertical === true ? -1 : 1) * stepVal
25322
+ );
25302
25323
 
25303
25324
  if (this.focus === 'both') {
25304
25325
  var interval = this.model.max - this.model.min;
@@ -27337,20 +27358,35 @@
27337
27358
  },
27338
27359
 
27339
27360
  comboboxAttrs: function comboboxAttrs () {
27340
- return {
27361
+ var attrs = {
27362
+ tabindex: this.tabindex,
27341
27363
  role: 'combobox',
27342
- 'aria-multiselectable': this.multiple === true ? 'true' : 'false',
27364
+ 'aria-label': this.label,
27365
+ 'aria-autocomplete': this.useInput === true ? 'list' : 'none',
27343
27366
  'aria-expanded': this.menu === true ? 'true' : 'false',
27344
27367
  'aria-owns': ((this.targetUid) + "_lb"),
27345
- 'aria-activedescendant': ((this.targetUid) + "_" + (this.optionIndex))
27368
+ 'aria-controls': ((this.targetUid) + "_lb")
27369
+ };
27370
+
27371
+ if (this.optionIndex >= 0) {
27372
+ attrs['aria-activedescendant'] = (this.targetUid) + "_" + (this.optionIndex);
27346
27373
  }
27374
+
27375
+ return attrs
27347
27376
  },
27348
27377
 
27349
27378
  listboxAttrs: function listboxAttrs () {
27350
- return {
27379
+ var attrs = {
27380
+ id: ((this.targetUid) + "_lb"),
27351
27381
  role: 'listbox',
27352
- id: ((this.targetUid) + "_lb")
27382
+ 'aria-multiselectable': this.multiple === true ? 'true' : 'false'
27383
+ };
27384
+
27385
+ if (this.optionIndex >= 0) {
27386
+ attrs['aria-activedescendant'] = (this.targetUid) + "_" + (this.optionIndex);
27353
27387
  }
27388
+
27389
+ return attrs
27354
27390
  }
27355
27391
  },
27356
27392
 
@@ -27429,6 +27465,9 @@
27429
27465
  true
27430
27466
  );
27431
27467
 
27468
+ this.dialogFieldFocused = false;
27469
+ document.activeElement.blur();
27470
+
27432
27471
  this.hidePopup();
27433
27472
  }
27434
27473
 
@@ -27488,6 +27527,7 @@
27488
27527
  },
27489
27528
 
27490
27529
  moveOptionSelection: function moveOptionSelection (offset, skipInputValue) {
27530
+ var this$1 = this;
27491
27531
  if ( offset === void 0 ) offset = 1;
27492
27532
 
27493
27533
  if (this.menu === true) {
@@ -27502,15 +27542,18 @@
27502
27542
  while (index !== -1 && index !== this.optionIndex && this.isOptionDisabled(this.options[index]) === true)
27503
27543
 
27504
27544
  if (this.optionIndex !== index) {
27505
- this.setOptionIndex(index);
27506
- this.scrollTo(index);
27545
+ cancelAnimationFrame(this.moveAnimationFrame);
27546
+ this.moveAnimationFrame = requestAnimationFrame(function () {
27547
+ this$1.setOptionIndex(index);
27548
+ this$1.scrollTo(index);
27507
27549
 
27508
- if (skipInputValue !== true && this.useInput === true && this.fillInput === true) {
27509
- this.__setInputValue(index >= 0
27510
- ? this.getOptionLabel(this.options[index])
27511
- : this.defaultInputValue
27512
- );
27513
- }
27550
+ if (skipInputValue !== true && this$1.useInput === true && this$1.fillInput === true) {
27551
+ this$1.__setInputValue(index >= 0
27552
+ ? this$1.getOptionLabel(this$1.options[index])
27553
+ : this$1.defaultInputValue
27554
+ );
27555
+ }
27556
+ });
27514
27557
  }
27515
27558
  }
27516
27559
  },
@@ -27857,7 +27900,7 @@
27857
27900
  var obj;
27858
27901
 
27859
27902
  return h(QChip, {
27860
- key: 'option-' + i,
27903
+ key: 'rem#' + i,
27861
27904
  props: {
27862
27905
  removable: this$1.editable === true && this$1.isOptionDisabled(scope.opt) !== true,
27863
27906
  dense: true,
@@ -27897,13 +27940,13 @@
27897
27940
  var attrs$1 = isTarget === true ? this.comboboxAttrs : void 0;
27898
27941
 
27899
27942
  child.push(
27900
- h('div', {
27943
+ h('input', {
27901
27944
  ref: isTarget === true ? 'target' : void 0,
27902
27945
  key: 'd_t',
27903
27946
  staticClass: 'q-select__focus-target',
27904
27947
  attrs: Object.assign({}, {id: isTarget === true ? this.targetUid : void 0,
27905
- tabindex: this.tabindex,
27906
- 'data-autofocus': (fromDialog !== true && this.autofocus) || void 0},
27948
+ readonly: true,
27949
+ 'data-autofocus': (fromDialog === true ? isTarget === true : this.autofocus) || void 0},
27907
27950
  attrs$1),
27908
27951
  on: cache(this, 'f-tget', {
27909
27952
  keydown: this.__onTargetKeydown,
@@ -27916,8 +27959,9 @@
27916
27959
  if (isTarget === true && typeof this.autocomplete === 'string' && this.autocomplete.length > 0) {
27917
27960
  child.push(
27918
27961
  h('input', {
27962
+ key: 'autoinp',
27919
27963
  staticClass: 'q-select__autocomplete-input',
27920
- attrs: { autocomplete: this.autocomplete },
27964
+ attrs: { autocomplete: this.autocomplete, tabindex: -1 },
27921
27965
  on: cache(this, 'autoinp', {
27922
27966
  keyup: this.__onTargetAutocomplete
27923
27967
  })
@@ -27954,6 +27998,12 @@
27954
27998
  return void 0
27955
27999
  }
27956
28000
 
28001
+ if (this.noOptions === true) {
28002
+ return this.$scopedSlots['no-option'] !== void 0
28003
+ ? this.$scopedSlots['no-option']({ inputValue: this.inputValue })
28004
+ : void 0
28005
+ }
28006
+
27957
28007
  if (
27958
28008
  this.$scopedSlots.option !== void 0 &&
27959
28009
  this.__optionScopeCache.optionSlot !== this.$scopedSlots.option
@@ -28024,9 +28074,8 @@
28024
28074
  attrs,
28025
28075
  {id: isTarget === true ? this.targetUid : void 0,
28026
28076
  maxlength: this.maxlength, // this is converted to prop by QField
28027
- tabindex: this.tabindex,
28028
28077
  autocomplete: this.autocomplete,
28029
- 'data-autofocus': (fromDialog !== true && this.autofocus) || void 0,
28078
+ 'data-autofocus': (fromDialog === true ? isTarget === true : this.autofocus) || void 0,
28030
28079
  disabled: this.disable === true,
28031
28080
  readonly: this.readonly === true}),
28032
28081
  on: this.inputControlEvents
@@ -28148,6 +28197,7 @@
28148
28197
  }
28149
28198
  else {
28150
28199
  this$1.menu = true;
28200
+ this$1.hasDialog === true && (this$1.dialog = true);
28151
28201
  }
28152
28202
  }
28153
28203
 
@@ -28188,15 +28238,13 @@
28188
28238
  focusout(e);
28189
28239
  },
28190
28240
  click: function (e) {
28191
- if (this$1.hasDialog !== true) {
28192
- // label from QField will propagate click on the input (except IE)
28193
- prevent(e);
28241
+ // label from QField will propagate click on the input (except IE)
28242
+ prevent(e);
28194
28243
 
28195
- if (this$1.menu === true) {
28196
- this$1.__closeMenu();
28197
- this$1.$refs.target !== void 0 && this$1.$refs.target.focus();
28198
- return
28199
- }
28244
+ if (this$1.hasDialog !== true && this$1.menu === true) {
28245
+ this$1.__closeMenu();
28246
+ this$1.$refs.target !== void 0 && this$1.$refs.target.focus();
28247
+ return
28200
28248
  }
28201
28249
 
28202
28250
  this$1.showPopup(e);
@@ -28217,15 +28265,8 @@
28217
28265
  },
28218
28266
 
28219
28267
  __getMenu: function __getMenu (h) {
28220
- var child = this.noOptions === true
28221
- ? (
28222
- this.$scopedSlots['no-option'] !== void 0
28223
- ? this.$scopedSlots['no-option']({ inputValue: this.inputValue })
28224
- : null
28225
- )
28226
- : this.__getOptions(h);
28227
-
28228
28268
  return h(QMenu, {
28269
+ key: 'menu',
28229
28270
  ref: 'menu',
28230
28271
  props: {
28231
28272
  value: this.menu,
@@ -28251,7 +28292,7 @@
28251
28292
  'before-hide': this.__closeMenu,
28252
28293
  show: this.__onMenuShow
28253
28294
  })
28254
- }, child)
28295
+ }, this.__getOptions(h))
28255
28296
  },
28256
28297
 
28257
28298
  __onMenuShow: function __onMenuShow () {
@@ -28300,8 +28341,9 @@
28300
28341
 
28301
28342
  this.menu === true && content.push(
28302
28343
  h('div', {
28344
+ key: 'virtMenu',
28303
28345
  ref: 'menuContent',
28304
- staticClass: 'scroll',
28346
+ staticClass: 'col scroll',
28305
28347
  class: this.menuContentClass,
28306
28348
  style: this.popupContentStyle,
28307
28349
  attrs: this.listboxAttrs,
@@ -28309,18 +28351,11 @@
28309
28351
  click: prevent,
28310
28352
  '&scroll': this.__onVirtualScrollEvt
28311
28353
  })
28312
- }, (
28313
- this.noOptions === true
28314
- ? (
28315
- this.$scopedSlots['no-option'] !== void 0
28316
- ? this.$scopedSlots['no-option']({ inputValue: this.inputValue })
28317
- : null
28318
- )
28319
- : this.__getOptions(h)
28320
- ))
28354
+ }, this.__getOptions(h))
28321
28355
  );
28322
28356
 
28323
28357
  return h(QDialog, {
28358
+ key: 'dialog',
28324
28359
  ref: 'dialog',
28325
28360
  props: {
28326
28361
  value: this.dialog,
@@ -28344,13 +28379,17 @@
28344
28379
  },
28345
28380
 
28346
28381
  __onDialogBeforeHide: function __onDialogBeforeHide () {
28347
- if (client.is.mobile !== true) {
28382
+ if (this.useInput !== true || this.$q.platform.is.desktop === true) {
28348
28383
  this.$refs.dialog.__refocusTarget = this.$el.querySelector('.q-field__native > [tabindex]:last-child');
28349
28384
  }
28350
28385
  this.focused = false;
28386
+ this.dialogFieldFocused = false;
28351
28387
  },
28352
28388
 
28353
28389
  __onDialogHide: function __onDialogHide (e) {
28390
+ if (this.$q.platform.is.desktop !== true) {
28391
+ document.activeElement.blur();
28392
+ }
28354
28393
  this.hidePopup();
28355
28394
  this.focused === false && this.$emit('blur', e);
28356
28395
  this.__resetInputValue();
@@ -35914,14 +35953,14 @@
35914
35953
  var this$1 = this;
35915
35954
 
35916
35955
  var localFiles = this.__processFiles(e, fileList, this.files, true);
35917
-
35918
- if (localFiles === void 0) { return }
35919
-
35920
35956
  var fileInput = this.__getFileInput();
35957
+
35921
35958
  if (fileInput !== void 0) {
35922
35959
  fileInput.value = '';
35923
35960
  }
35924
35961
 
35962
+ if (localFiles === void 0) { return }
35963
+
35925
35964
  localFiles.forEach(function (file) {
35926
35965
  this$1.__updateFile(file, 'idle');
35927
35966
  this$1.uploadSize += file.size;
@@ -39660,19 +39699,35 @@
39660
39699
  vm,
39661
39700
  uid$3 = 0,
39662
39701
  timeout,
39663
- props$1 = {};
39664
- var
39665
- originalDefaults = {
39666
- delay: 0,
39667
- message: false,
39668
- spinnerSize: 80,
39669
- spinnerColor: 'white',
39670
- messageColor: 'white',
39671
- backgroundColor: 'black',
39672
- spinner: QSpinner,
39673
- customClass: ''
39674
- },
39675
- defaults = Object.assign({}, originalDefaults);
39702
+ props$1 = {},
39703
+ activeGroups = {};
39704
+
39705
+ var originalDefaults = {
39706
+ group: '__default_quasar_group__',
39707
+ delay: 0,
39708
+ message: false,
39709
+ spinnerSize: 80,
39710
+ spinnerColor: 'white',
39711
+ messageColor: 'white',
39712
+ backgroundColor: 'black',
39713
+ spinner: QSpinner,
39714
+ customClass: ''
39715
+ };
39716
+
39717
+ var defaults = Object.assign({}, originalDefaults);
39718
+
39719
+ function registerProps (opts) {
39720
+ if (opts && opts.group !== void 0 && activeGroups[ opts.group ] !== void 0) {
39721
+ return Object.assign(activeGroups[ opts.group ], opts)
39722
+ }
39723
+
39724
+ var newProps = isObject(opts) === true && opts.ignoreDefaults === true
39725
+ ? Object.assign({}, originalDefaults, opts)
39726
+ : Object.assign({}, defaults, opts);
39727
+
39728
+ activeGroups[ newProps.group ] = newProps;
39729
+ return newProps
39730
+ }
39676
39731
 
39677
39732
  var Loading = {
39678
39733
  isActive: false,
@@ -39682,9 +39737,8 @@
39682
39737
 
39683
39738
  if (isSSR === true) { return }
39684
39739
 
39685
- props$1 = isObject(opts) === true && opts.ignoreDefaults === true
39686
- ? Object.assign({}, originalDefaults, opts)
39687
- : Object.assign({}, defaults, opts);
39740
+ props$1 = registerProps(opts);
39741
+ var group = props$1.group;
39688
39742
 
39689
39743
  props$1.customClass += " text-" + (props$1.backgroundColor);
39690
39744
 
@@ -39693,81 +39747,116 @@
39693
39747
  if (vm !== void 0) {
39694
39748
  props$1.uid = uid$3;
39695
39749
  vm.$forceUpdate();
39696
- return
39697
39750
  }
39751
+ else {
39752
+ props$1.uid = ++uid$3;
39753
+ clearTimeout(timeout);
39698
39754
 
39699
- props$1.uid = ++uid$3;
39700
- clearTimeout(timeout);
39755
+ timeout = setTimeout(function () {
39756
+ timeout = void 0;
39701
39757
 
39702
- timeout = setTimeout(function () {
39703
- timeout = void 0;
39758
+ var node = document.createElement('div');
39759
+ document.body.appendChild(node);
39704
39760
 
39705
- var node = document.createElement('div');
39706
- document.body.appendChild(node);
39707
-
39708
- vm = new Vue({
39709
- name: 'QLoading',
39761
+ vm = new Vue({
39762
+ name: 'QLoading',
39710
39763
 
39711
- // hide App from Vue devtools
39712
- devtools: { hide: true },
39764
+ // hide App from Vue devtools
39765
+ devtools: { hide: true },
39713
39766
 
39714
- beforeCreate: function beforeCreate () {
39715
- // prevent error in Vue devtools
39716
- this._routerRoot === void 0 && (this._routerRoot = {});
39717
- },
39767
+ beforeCreate: function beforeCreate () {
39768
+ // prevent error in Vue devtools
39769
+ this._routerRoot === void 0 && (this._routerRoot = {});
39770
+ },
39718
39771
 
39719
- el: node,
39772
+ el: node,
39720
39773
 
39721
- mounted: function mounted () {
39722
- preventScroll(true);
39723
- },
39774
+ mounted: function mounted () {
39775
+ preventScroll(true);
39776
+ },
39724
39777
 
39725
- render: function (h) {
39726
- var obj;
39778
+ render: function (h) {
39779
+ var obj;
39727
39780
 
39728
- return h('transition', {
39729
- props: {
39730
- name: 'q-transition--fade',
39731
- appear: true
39732
- },
39733
- on: cache(this$1, 'tr', {
39734
- 'after-leave': function () {
39735
- // might be called to finalize
39736
- // previous leave, even if it was cancelled
39737
- if (this$1.isActive !== true && vm !== void 0) {
39738
- preventScroll(false);
39739
- vm.$destroy();
39740
- vm.$el.remove();
39741
- vm = void 0;
39781
+ return h('transition', {
39782
+ props: {
39783
+ name: 'q-transition--fade',
39784
+ appear: true
39785
+ },
39786
+ on: cache(this$1, 'tr', {
39787
+ 'after-leave': function () {
39788
+ // might be called to finalize
39789
+ // previous leave, even if it was cancelled
39790
+ if (this$1.isActive !== true && vm !== void 0) {
39791
+ preventScroll(false);
39792
+ vm.$destroy();
39793
+ vm.$el.remove();
39794
+ vm = void 0;
39795
+ }
39742
39796
  }
39743
- }
39744
- })
39745
- }, [
39746
- this$1.isActive === true ? h('div', {
39747
- staticClass: 'q-loading fullscreen column flex-center z-max',
39748
- key: props$1.uid,
39749
- class: props$1.customClass.trim()
39797
+ })
39750
39798
  }, [
39751
- h(props$1.spinner, {
39752
- props: {
39753
- color: props$1.spinnerColor,
39754
- size: props$1.spinnerSize
39755
- }
39756
- }),
39799
+ this$1.isActive === true ? h('div', {
39800
+ staticClass: 'q-loading fullscreen column flex-center z-max',
39801
+ key: props$1.uid,
39802
+ class: props$1.customClass.trim()
39803
+ }, [
39804
+ h(props$1.spinner, {
39805
+ props: {
39806
+ color: props$1.spinnerColor,
39807
+ size: props$1.spinnerSize
39808
+ }
39809
+ }),
39757
39810
 
39758
- (props$1.message && h('div', {
39759
- class: ("text-" + (props$1.messageColor)),
39760
- domProps: ( obj = {}, obj[props$1.sanitize === true ? 'textContent' : 'innerHTML'] = props$1.message, obj )
39761
- })) || void 0
39762
- ]) : null
39763
- ])
39764
- }
39765
- });
39766
- }, props$1.delay);
39811
+ (props$1.message && h('div', {
39812
+ class: ("text-" + (props$1.messageColor)),
39813
+ domProps: ( obj = {}, obj[props$1.sanitize === true ? 'textContent' : 'innerHTML'] = props$1.message, obj )
39814
+ })) || void 0
39815
+ ]) : null
39816
+ ])
39817
+ }
39818
+ });
39819
+ }, props$1.delay);
39820
+ }
39821
+
39822
+ return function (paramProps) {
39823
+ // if we don't have params (or not an Object param) then we need to hide this group
39824
+ if (paramProps === void 0 || Object(paramProps) !== paramProps) {
39825
+ this$1.hide(group);
39826
+ return
39827
+ }
39828
+
39829
+ // else we have params so we need to update this group
39830
+ this$1.show(Object.assign({}, paramProps, {group: group}));
39831
+ }
39767
39832
  },
39768
39833
 
39769
- hide: function hide () {
39834
+ hide: function hide (group) {
39770
39835
  if (this.isActive === true) {
39836
+ if (group === void 0) {
39837
+ // clear out any active groups
39838
+ activeGroups = {};
39839
+ }
39840
+ else if (activeGroups[ group ] === void 0) {
39841
+ // we've already hidden it so nothing to do
39842
+ return
39843
+ }
39844
+ else {
39845
+ // remove active group
39846
+ delete activeGroups[ group ];
39847
+
39848
+ var keys = Object.keys(activeGroups);
39849
+
39850
+ // if there are other groups registered then
39851
+ // show last registered one since that one is still active
39852
+ if (keys.length !== 0) {
39853
+ // get last registered group
39854
+ var lastGroup = keys[ keys.length - 1 ];
39855
+ this.show({ group: lastGroup });
39856
+ return
39857
+ }
39858
+ }
39859
+
39771
39860
  if (timeout !== void 0) {
39772
39861
  clearTimeout(timeout);
39773
39862
  timeout = void 0;