quasar 1.20.1 → 1.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/dist/api/QBtnDropdown.json +9 -0
  2. package/dist/api/QChip.json +9 -0
  3. package/dist/api/QCircularProgress.json +6 -0
  4. package/dist/api/QExpansionItem.json +59 -0
  5. package/dist/api/QTable.json +2 -2
  6. package/dist/babel-transforms/imports.js +1 -0
  7. package/dist/icon-set/bootstrap-icons.umd.min.js +1 -1
  8. package/dist/icon-set/eva-icons.umd.min.js +1 -1
  9. package/dist/icon-set/fontawesome-v5-pro.umd.min.js +1 -1
  10. package/dist/icon-set/fontawesome-v5.umd.min.js +1 -1
  11. package/dist/icon-set/fontawesome-v6-pro.umd.min.js +1 -1
  12. package/dist/icon-set/fontawesome-v6.umd.min.js +1 -1
  13. package/dist/icon-set/ionicons-v4.umd.min.js +1 -1
  14. package/dist/icon-set/line-awesome.umd.min.js +1 -1
  15. package/dist/icon-set/material-icons-outlined.umd.min.js +1 -1
  16. package/dist/icon-set/material-icons-round.umd.min.js +1 -1
  17. package/dist/icon-set/material-icons-sharp.umd.min.js +1 -1
  18. package/dist/icon-set/material-icons.umd.min.js +1 -1
  19. package/dist/icon-set/material-symbols-outlined.umd.min.js +1 -1
  20. package/dist/icon-set/material-symbols-rounded.umd.min.js +1 -1
  21. package/dist/icon-set/material-symbols-sharp.umd.min.js +1 -1
  22. package/dist/icon-set/mdi-v3.umd.min.js +1 -1
  23. package/dist/icon-set/mdi-v4.umd.min.js +1 -1
  24. package/dist/icon-set/mdi-v5.umd.min.js +1 -1
  25. package/dist/icon-set/mdi-v6.umd.min.js +1 -1
  26. package/dist/icon-set/svg-bootstrap-icons.umd.min.js +1 -1
  27. package/dist/icon-set/svg-eva-icons.umd.min.js +1 -1
  28. package/dist/icon-set/svg-fontawesome-v5.umd.min.js +1 -1
  29. package/dist/icon-set/svg-fontawesome-v6.umd.min.js +1 -1
  30. package/dist/icon-set/svg-ionicons-v4.umd.min.js +1 -1
  31. package/dist/icon-set/svg-ionicons-v5.umd.min.js +1 -1
  32. package/dist/icon-set/svg-ionicons-v6.umd.min.js +1 -1
  33. package/dist/icon-set/svg-line-awesome.umd.min.js +1 -1
  34. package/dist/icon-set/svg-material-icons-outlined.umd.min.js +1 -1
  35. package/dist/icon-set/svg-material-icons-round.umd.min.js +1 -1
  36. package/dist/icon-set/svg-material-icons-sharp.umd.min.js +1 -1
  37. package/dist/icon-set/svg-material-icons.umd.min.js +1 -1
  38. package/dist/icon-set/svg-material-symbols-outlined.umd.min.js +1 -1
  39. package/dist/icon-set/svg-material-symbols-rounded.umd.min.js +1 -1
  40. package/dist/icon-set/svg-material-symbols-sharp.umd.min.js +1 -1
  41. package/dist/icon-set/svg-mdi-v4.umd.min.js +1 -1
  42. package/dist/icon-set/svg-mdi-v5.umd.min.js +1 -1
  43. package/dist/icon-set/svg-mdi-v6.umd.min.js +1 -1
  44. package/dist/icon-set/svg-themify.umd.min.js +1 -1
  45. package/dist/icon-set/themify.umd.min.js +1 -1
  46. package/dist/lang/ar.umd.min.js +2 -2
  47. package/dist/lang/az-latn.umd.min.js +2 -2
  48. package/dist/lang/bg.umd.min.js +2 -2
  49. package/dist/lang/ca.umd.min.js +2 -2
  50. package/dist/lang/cs.umd.min.js +2 -2
  51. package/dist/lang/da.umd.min.js +2 -2
  52. package/dist/lang/de.umd.min.js +2 -2
  53. package/dist/lang/el.umd.min.js +2 -2
  54. package/dist/lang/en-gb.umd.min.js +2 -2
  55. package/dist/lang/en-us.umd.min.js +2 -2
  56. package/dist/lang/eo.umd.min.js +2 -2
  57. package/dist/lang/es.umd.min.js +2 -2
  58. package/dist/lang/et.umd.min.js +2 -2
  59. package/dist/lang/eu.umd.min.js +2 -2
  60. package/dist/lang/fa-ir.umd.min.js +2 -2
  61. package/dist/lang/fa.umd.min.js +2 -2
  62. package/dist/lang/fi.umd.min.js +2 -2
  63. package/dist/lang/fr.umd.min.js +2 -2
  64. package/dist/lang/gn.umd.min.js +2 -2
  65. package/dist/lang/he.umd.min.js +2 -2
  66. package/dist/lang/hr.umd.min.js +2 -2
  67. package/dist/lang/hu.umd.min.js +2 -2
  68. package/dist/lang/id.umd.min.js +2 -2
  69. package/dist/lang/is.umd.min.js +2 -2
  70. package/dist/lang/it.umd.min.js +2 -2
  71. package/dist/lang/ja.umd.min.js +2 -2
  72. package/dist/lang/km.umd.min.js +2 -2
  73. package/dist/lang/ko-kr.umd.min.js +2 -2
  74. package/dist/lang/kur-ckb.umd.min.js +2 -2
  75. package/dist/lang/kz.umd.min.js +2 -2
  76. package/dist/lang/lu.umd.min.js +2 -2
  77. package/dist/lang/lv.umd.min.js +2 -2
  78. package/dist/lang/ml.umd.min.js +2 -2
  79. package/dist/lang/mm.umd.min.js +2 -2
  80. package/dist/lang/ms.umd.min.js +2 -2
  81. package/dist/lang/my.umd.min.js +2 -2
  82. package/dist/lang/nb-no.umd.min.js +2 -2
  83. package/dist/lang/nl.umd.min.js +2 -2
  84. package/dist/lang/pl.umd.min.js +2 -2
  85. package/dist/lang/pt-br.umd.min.js +2 -2
  86. package/dist/lang/pt.umd.min.js +2 -2
  87. package/dist/lang/ro.umd.min.js +2 -2
  88. package/dist/lang/ru.umd.min.js +2 -2
  89. package/dist/lang/sk.umd.min.js +2 -2
  90. package/dist/lang/sl.umd.min.js +2 -2
  91. package/dist/lang/sm.umd.min.js +2 -2
  92. package/dist/lang/sr.umd.min.js +2 -2
  93. package/dist/lang/sv.umd.min.js +2 -2
  94. package/dist/lang/ta.umd.min.js +2 -2
  95. package/dist/lang/th.umd.min.js +2 -2
  96. package/dist/lang/tr.umd.min.js +2 -2
  97. package/dist/lang/ug.umd.min.js +2 -2
  98. package/dist/lang/uk.umd.min.js +2 -2
  99. package/dist/lang/uz-Cyrl.umd.min.js +2 -2
  100. package/dist/lang/uz-Latn.umd.min.js +2 -2
  101. package/dist/lang/vi.umd.min.js +2 -2
  102. package/dist/lang/zh-hans.umd.min.js +2 -2
  103. package/dist/lang/zh-hant.umd.min.js +2 -2
  104. package/dist/quasar.addon.css +1 -1
  105. package/dist/quasar.addon.rtl.css +1 -1
  106. package/dist/quasar.common.js +2 -2
  107. package/dist/quasar.css +1 -1
  108. package/dist/quasar.esm.js +2 -2
  109. package/dist/quasar.ie.polyfills.js +1 -1
  110. package/dist/quasar.ie.polyfills.umd.min.js +1 -1
  111. package/dist/quasar.rtl.css +1 -1
  112. package/dist/quasar.sass +1 -1
  113. package/dist/quasar.styl +1 -1
  114. package/dist/quasar.umd.js +360 -160
  115. package/dist/quasar.umd.min.js +2 -2
  116. package/dist/quasar.umd.modern.js +349 -153
  117. package/dist/quasar.umd.modern.min.js +2 -2
  118. package/dist/types/index.d.ts +21 -1
  119. package/dist/types/utils/is.d.ts +67 -0
  120. package/dist/types/utils/run-sequential-promises.d.ts +119 -0
  121. package/dist/types/utils.d.ts +2 -0
  122. package/dist/vetur/quasar-attributes.json +21 -1
  123. package/dist/vetur/quasar-tags.json +6 -1
  124. package/dist/web-types/web-types.json +73 -2
  125. package/lang/ar.js +3 -1
  126. package/lang/az-latn.js +3 -1
  127. package/lang/bg.js +3 -1
  128. package/lang/ca.js +3 -1
  129. package/lang/cs.js +3 -1
  130. package/lang/da.js +3 -1
  131. package/lang/de.js +3 -1
  132. package/lang/el.js +3 -1
  133. package/lang/en-gb.js +3 -1
  134. package/lang/en-us.js +3 -1
  135. package/lang/eo.js +3 -1
  136. package/lang/es.js +3 -1
  137. package/lang/et.js +3 -1
  138. package/lang/eu.js +3 -1
  139. package/lang/fa-ir.js +3 -1
  140. package/lang/fa.js +3 -1
  141. package/lang/fi.js +3 -1
  142. package/lang/fr.js +3 -1
  143. package/lang/gn.js +3 -1
  144. package/lang/he.js +3 -1
  145. package/lang/hr.js +3 -1
  146. package/lang/hu.js +3 -1
  147. package/lang/id.js +3 -1
  148. package/lang/is.js +3 -1
  149. package/lang/it.js +3 -1
  150. package/lang/ja.js +3 -1
  151. package/lang/km.js +3 -1
  152. package/lang/ko-kr.js +3 -1
  153. package/lang/kur-ckb.js +3 -1
  154. package/lang/kz.js +3 -1
  155. package/lang/lu.js +3 -1
  156. package/lang/lv.js +3 -1
  157. package/lang/ml.js +3 -1
  158. package/lang/mm.js +3 -1
  159. package/lang/ms.js +3 -1
  160. package/lang/my.js +3 -1
  161. package/lang/nb-no.js +3 -1
  162. package/lang/nl.js +3 -1
  163. package/lang/pl.js +3 -1
  164. package/lang/pt-br.js +3 -1
  165. package/lang/pt.js +3 -1
  166. package/lang/ro.js +3 -1
  167. package/lang/ru.js +3 -1
  168. package/lang/sk.js +3 -1
  169. package/lang/sl.js +3 -1
  170. package/lang/sm.js +3 -1
  171. package/lang/sr.js +3 -1
  172. package/lang/sv.js +3 -1
  173. package/lang/ta.js +3 -1
  174. package/lang/th.js +3 -1
  175. package/lang/tr.js +3 -1
  176. package/lang/ug.js +3 -1
  177. package/lang/uk.js +3 -1
  178. package/lang/uz-Cyrl.js +3 -1
  179. package/lang/uz-Latn.js +3 -1
  180. package/lang/vi.js +3 -1
  181. package/lang/zh-hans.js +3 -1
  182. package/lang/zh-hant.js +3 -1
  183. package/package.json +1 -1
  184. package/src/components/btn-dropdown/QBtnDropdown.js +17 -4
  185. package/src/components/btn-dropdown/QBtnDropdown.json +8 -0
  186. package/src/components/chip/QChip.js +8 -1
  187. package/src/components/chip/QChip.json +8 -0
  188. package/src/components/circular-progress/QCircularProgress.js +5 -2
  189. package/src/components/circular-progress/QCircularProgress.json +7 -0
  190. package/src/components/dialog/QDialog.js +7 -1
  191. package/src/components/expansion-item/QExpansionItem.js +38 -3
  192. package/src/components/expansion-item/QExpansionItem.json +67 -0
  193. package/src/components/fab/QFab.js +24 -1
  194. package/src/components/form/QForm.js +43 -49
  195. package/src/components/menu/QMenu.js +1 -0
  196. package/src/components/select/QSelect.js +1 -4
  197. package/src/components/table/QTable.js +1 -1
  198. package/src/components/table/QTable.json +2 -2
  199. package/src/mixins/file.js +1 -1
  200. package/src/mixins/validate.js +5 -3
  201. package/src/utils/run-sequential-promises.js +115 -0
  202. package/src/utils.js +2 -0
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v1.20.1
2
+ * Quasar Framework v1.20.2
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.20.1";
15
+ var version = "1.20.2";
16
16
 
17
17
  /* eslint-disable no-useless-escape */
18
18
 
@@ -1004,7 +1004,9 @@
1004
1004
  create: 'Create',
1005
1005
  search: 'Search',
1006
1006
  filter: 'Filter',
1007
- refresh: 'Refresh'
1007
+ refresh: 'Refresh',
1008
+ expand: function (label) { return label ? ("Expand \"" + label + "\"") : 'Expand' },
1009
+ collapse: function (label) { return label ? ("Collapse \"" + label + "\"") : 'Collapse' }
1008
1010
  },
1009
1011
  date: {
1010
1012
  days: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
@@ -5487,7 +5489,8 @@
5487
5489
  },
5488
5490
 
5489
5491
  attrs: function attrs () {
5490
- return Object.assign({}, {tabindex: -1},
5492
+ return Object.assign({}, {tabindex: -1,
5493
+ role: 'menu'},
5491
5494
  this.qAttrs)
5492
5495
  }
5493
5496
  },
@@ -5722,6 +5725,79 @@
5722
5725
  }
5723
5726
  });
5724
5727
 
5728
+ /**
5729
+ * Based on the work of https://github.com/jchook/uuid-random
5730
+ */
5731
+
5732
+ var
5733
+ buf,
5734
+ bufIdx = 0;
5735
+ var hexBytes = new Array(256);
5736
+
5737
+ // Pre-calculate toString(16) for speed
5738
+ for (var i = 0; i < 256; i++) {
5739
+ hexBytes[i] = (i + 0x100).toString(16).substr(1);
5740
+ }
5741
+
5742
+ // Use best available PRNG
5743
+ var randomBytes = (function () {
5744
+ // Node & Browser support
5745
+ var lib = typeof crypto !== 'undefined'
5746
+ ? crypto
5747
+ : (
5748
+ typeof window !== 'undefined'
5749
+ ? window.msCrypto // IE11
5750
+ : void 0
5751
+ );
5752
+
5753
+ if (lib !== void 0) {
5754
+ if (lib.randomBytes !== void 0) {
5755
+ return lib.randomBytes
5756
+ }
5757
+ if (lib.getRandomValues !== void 0) {
5758
+ return function (n) {
5759
+ var bytes = new Uint8Array(n);
5760
+ lib.getRandomValues(bytes);
5761
+ return bytes
5762
+ }
5763
+ }
5764
+ }
5765
+
5766
+ return function (n) {
5767
+ var r = [];
5768
+ for (var i = n; i > 0; i--) {
5769
+ r.push(Math.floor(Math.random() * 256));
5770
+ }
5771
+ return r
5772
+ }
5773
+ })();
5774
+
5775
+ // Buffer random numbers for speed
5776
+ // Reduce memory usage by decreasing this number (min 16)
5777
+ // or improve speed by increasing this number (try 16384)
5778
+ var BUFFER_SIZE = 4096;
5779
+
5780
+ function uid () {
5781
+ // Buffer some random bytes for speed
5782
+ if (buf === void 0 || (bufIdx + 16 > BUFFER_SIZE)) {
5783
+ bufIdx = 0;
5784
+ buf = randomBytes(BUFFER_SIZE);
5785
+ }
5786
+
5787
+ var b = Array.prototype.slice.call(buf, bufIdx, (bufIdx += 16));
5788
+ b[6] = (b[6] & 0x0f) | 0x40;
5789
+ b[8] = (b[8] & 0x3f) | 0x80;
5790
+
5791
+ return hexBytes[b[0]] + hexBytes[b[1]] +
5792
+ hexBytes[b[2]] + hexBytes[b[3]] + '-' +
5793
+ hexBytes[b[4]] + hexBytes[b[5]] + '-' +
5794
+ hexBytes[b[6]] + hexBytes[b[7]] + '-' +
5795
+ hexBytes[b[8]] + hexBytes[b[9]] + '-' +
5796
+ hexBytes[b[10]] + hexBytes[b[11]] +
5797
+ hexBytes[b[12]] + hexBytes[b[13]] +
5798
+ hexBytes[b[14]] + hexBytes[b[15]]
5799
+ }
5800
+
5725
5801
  var QBtnDropdown = Vue.extend({
5726
5802
  name: 'QBtnDropdown',
5727
5803
 
@@ -5755,7 +5831,9 @@
5755
5831
  disableMainBtn: Boolean,
5756
5832
  disableDropdown: Boolean,
5757
5833
 
5758
- noIconAnimation: Boolean
5834
+ noIconAnimation: Boolean,
5835
+
5836
+ toggleAriaLabel: String
5759
5837
  },
5760
5838
 
5761
5839
  data: function data () {
@@ -5780,7 +5858,10 @@
5780
5858
  var label = slot(this, 'label', []);
5781
5859
  var attrs = {
5782
5860
  'aria-expanded': this.showing === true ? 'true' : 'false',
5783
- 'aria-haspopup': 'true'
5861
+ 'aria-haspopup': 'true',
5862
+ 'aria-controls': this.targetUid,
5863
+ 'aria-owns': this.targetUid,
5864
+ 'aria-label': this.toggleAriaLabel || this.$q.lang.label[ this.showing === true ? 'collapse' : 'expand' ](this.label)
5784
5865
  };
5785
5866
 
5786
5867
  if (
@@ -5805,6 +5886,9 @@
5805
5886
  this.disableDropdown !== true && Arrow.push(
5806
5887
  h(QMenu, {
5807
5888
  ref: 'menu',
5889
+ attrs: {
5890
+ id: this.targetUid
5891
+ },
5808
5892
  props: {
5809
5893
  cover: this.cover,
5810
5894
  fit: true,
@@ -5846,8 +5930,8 @@
5846
5930
  {disable: this.disable === true || this.disableMainBtn === true,
5847
5931
  noWrap: true,
5848
5932
  round: false}),
5849
- attrs: Object.assign({}, this.qAttrs,
5850
- attrs),
5933
+ attrs: Object.assign({}, attrs,
5934
+ this.qAttrs),
5851
5935
  on: cache(this, 'nonSpl', {
5852
5936
  click: function (e) {
5853
5937
  this$1.$emit('click', e);
@@ -5926,6 +6010,10 @@
5926
6010
  }
5927
6011
  },
5928
6012
 
6013
+ created: function created () {
6014
+ this.targetUid = "d_" + (uid());
6015
+ },
6016
+
5929
6017
  mounted: function mounted () {
5930
6018
  this.value === true && this.show();
5931
6019
  }
@@ -7924,6 +8012,8 @@
7924
8012
  clickable: Boolean,
7925
8013
  removable: Boolean,
7926
8014
 
8015
+ removeAriaLabel: String,
8016
+
7927
8017
  tabindex: [String, Number],
7928
8018
  disable: Boolean
7929
8019
  },
@@ -7960,7 +8050,12 @@
7960
8050
  attrs: function attrs () {
7961
8051
  return this.disable === true
7962
8052
  ? { tabindex: -1, 'aria-disabled': 'true' }
7963
- : { tabindex: this.tabindex || 0 }
8053
+ : {
8054
+ tabindex: this.tabindex || 0,
8055
+ role: 'button',
8056
+ 'aria-hidden': 'false',
8057
+ 'aria-label': this.removeAriaLabel || this.$q.lang.label.remove
8058
+ }
7964
8059
  }
7965
8060
  },
7966
8061
 
@@ -8085,6 +8180,7 @@
8085
8180
  trackColor: String,
8086
8181
 
8087
8182
  fontSize: String,
8183
+ rounded: Boolean,
8088
8184
 
8089
8185
  // ratio
8090
8186
  thickness: {
@@ -8159,6 +8255,7 @@
8159
8255
  var offset = ref.offset;
8160
8256
  var color = ref.color;
8161
8257
  var cls = ref.cls;
8258
+ var rounded = ref.rounded;
8162
8259
 
8163
8260
  return h('circle', {
8164
8261
  staticClass: 'q-circular-progress__' + cls,
@@ -8170,6 +8267,7 @@
8170
8267
  'stroke-width': thickness,
8171
8268
  'stroke-dasharray': strokeDashArray,
8172
8269
  'stroke-dashoffset': offset,
8270
+ 'stroke-linecap': rounded,
8173
8271
  cx: this.viewBox,
8174
8272
  cy: this.viewBox,
8175
8273
  r: radius
@@ -8208,7 +8306,8 @@
8208
8306
  cls: 'circle',
8209
8307
  thickness: this.strokeWidth,
8210
8308
  offset: this.strokeDashOffset,
8211
- color: this.color
8309
+ color: this.color,
8310
+ rounded: this.rounded === true ? 'round' : void 0
8212
8311
  })
8213
8312
  );
8214
8313
 
@@ -8409,7 +8508,7 @@
8409
8508
  }
8410
8509
  }
8411
8510
 
8412
- var uid = 0;
8511
+ var uid$1 = 0;
8413
8512
 
8414
8513
  var TouchPan = {
8415
8514
  name: 'touch-pan',
@@ -8439,7 +8538,7 @@
8439
8538
  }
8440
8539
 
8441
8540
  var ctx = {
8442
- uid: 'qvtp_' + (uid++),
8541
+ uid: 'qvtp_' + (uid$1++),
8443
8542
  handler: value,
8444
8543
  modifiers: modifiers,
8445
8544
  direction: getModifierDirections(modifiers),
@@ -10351,7 +10450,7 @@
10351
10450
  }
10352
10451
  });
10353
10452
 
10354
- var uid$1 = 0;
10453
+ var uid$2 = 0;
10355
10454
 
10356
10455
  var QTab = Vue.extend({
10357
10456
  name: 'QTab',
@@ -10378,7 +10477,7 @@
10378
10477
 
10379
10478
  name: {
10380
10479
  type: [Number, String],
10381
- default: function () { return ("t_" + (uid$1++)); }
10480
+ default: function () { return ("t_" + (uid$2++)); }
10382
10481
  },
10383
10482
 
10384
10483
  noCaps: Boolean,
@@ -14780,6 +14879,12 @@
14780
14879
  }
14781
14880
 
14782
14881
  return on
14882
+ },
14883
+
14884
+ attrs: function attrs () {
14885
+ return this.useBackdrop === true
14886
+ ? Object.assign({}, {'aria-modal': 'true'}, this.qAttrs)
14887
+ : this.qAttrs
14783
14888
  }
14784
14889
  },
14785
14890
 
@@ -14980,7 +15085,7 @@
14980
15085
  staticClass: ("q-dialog fullscreen no-pointer-events q-dialog--" + (this.useBackdrop === true ? 'modal' : 'seamless')),
14981
15086
  class: this.contentClass,
14982
15087
  style: this.contentStyle,
14983
- attrs: this.qAttrs
15088
+ attrs: this.attrs
14984
15089
  }, [
14985
15090
  h('transition', {
14986
15091
  props: { name: 'q-transition--fade' }
@@ -17715,6 +17820,7 @@
17715
17820
 
17716
17821
  dense: Boolean,
17717
17822
 
17823
+ toggleAriaLabel: String,
17718
17824
  expandIcon: String,
17719
17825
  expandedIcon: String,
17720
17826
  expandIconClass: [ Array, String, Object ],
@@ -17725,6 +17831,7 @@
17725
17831
 
17726
17832
  expandSeparator: Boolean,
17727
17833
  defaultOpened: Boolean,
17834
+ hideExpandIcon: Boolean,
17728
17835
  expandIconToggle: Boolean,
17729
17836
  switchToggleSide: Boolean,
17730
17837
  denseToggle: Boolean,
@@ -17785,6 +17892,30 @@
17785
17892
 
17786
17893
  activeToggleIcon: function activeToggleIcon () {
17787
17894
  return this.disable !== true && (this.hasLink === true || this.expandIconToggle === true)
17895
+ },
17896
+
17897
+ headerSlotScope: function headerSlotScope () {
17898
+ return {
17899
+ expanded: this.showing === true,
17900
+ detailsId: this.targetUid,
17901
+ toggle: this.toggle,
17902
+ show: this.show,
17903
+ hide: this.hide
17904
+ }
17905
+ },
17906
+
17907
+ toggleAriaAttrs: function toggleAriaAttrs () {
17908
+ var toggleAriaLabel = this.toggleAriaLabel !== void 0
17909
+ ? this.toggleAriaLabel
17910
+ : this.$q.lang.label[ this.showing === true ? 'collapse' : 'expand' ](this.label);
17911
+
17912
+ return {
17913
+ role: 'button',
17914
+ 'aria-expanded': this.showing === true ? 'true' : 'false',
17915
+ 'aria-owns': this.targetUid,
17916
+ 'aria-controls': this.targetUid,
17917
+ 'aria-label': toggleAriaLabel
17918
+ }
17788
17919
  }
17789
17920
  },
17790
17921
 
@@ -17830,7 +17961,8 @@
17830
17961
 
17831
17962
  if (this.activeToggleIcon === true) {
17832
17963
  Object.assign(data, {
17833
- attrs: { tabindex: 0 },
17964
+ attrs: Object.assign({}, {tabindex: 0},
17965
+ this.toggleAriaAttrs),
17834
17966
  on: cache(this, 'inpExt', {
17835
17967
  click: this.__toggleIcon,
17836
17968
  keyup: this.__toggleIconKeyboard
@@ -17853,7 +17985,7 @@
17853
17985
  var child;
17854
17986
 
17855
17987
  if (this.$scopedSlots.header !== void 0) {
17856
- child = [].concat(this.$scopedSlots.header({ expanded: this.showing === true }));
17988
+ child = [].concat(this.$scopedSlots.header(this.headerSlotScope));
17857
17989
  }
17858
17990
  else {
17859
17991
  child = [
@@ -17884,7 +18016,7 @@
17884
18016
  );
17885
18017
  }
17886
18018
 
17887
- this.disable !== true && child[this.switchToggleSide === true ? 'unshift' : 'push'](
18019
+ this.disable !== true && this.hideExpandIcon !== true && child[this.switchToggleSide === true ? 'unshift' : 'push'](
17888
18020
  this.__getToggleIcon(h)
17889
18021
  );
17890
18022
 
@@ -17913,6 +18045,9 @@
17913
18045
 
17914
18046
  data.attrs = this.linkProps.attrs;
17915
18047
  }
18048
+ else {
18049
+ data.attrs = this.toggleAriaAttrs;
18050
+ }
17916
18051
  }
17917
18052
 
17918
18053
  return h(QItem, data, child)
@@ -17934,6 +18069,7 @@
17934
18069
  h('div', {
17935
18070
  staticClass: 'q-expansion-item__content relative-position',
17936
18071
  style: this.contentStyle,
18072
+ attrs: { id: this.targetUid },
17937
18073
  directives: [{ name: 'show', value: this.showing }]
17938
18074
  }, slot(this, 'default'))
17939
18075
  ])
@@ -17971,6 +18107,7 @@
17971
18107
 
17972
18108
  created: function created () {
17973
18109
  this.group !== void 0 && this.$root.$on(eventName, this.__eventHandler);
18110
+ this.targetUid = "e_" + (uid());
17974
18111
  },
17975
18112
 
17976
18113
  beforeDestroy: function beforeDestroy () {
@@ -18124,13 +18261,30 @@
18124
18261
  return "q-fab__actions--" + (this.direction) + (this.showing === true ? ' q-fab__actions--opened' : '')
18125
18262
  },
18126
18263
 
18264
+ actionsAttrs: function actionsAttrs () {
18265
+ var attrs = {
18266
+ id: this.targetUid
18267
+ };
18268
+
18269
+ if (this.showing === true) {
18270
+ attrs.role = 'menu';
18271
+ }
18272
+ else {
18273
+ attrs['aria-hidden'] = 'true';
18274
+ }
18275
+
18276
+ return attrs
18277
+ },
18278
+
18127
18279
  iconHolderClasses: function iconHolderClasses () {
18128
18280
  return this.showing === true ? 'q-fab__icon-holder--opened' : ''
18129
18281
  },
18130
18282
 
18131
18283
  attrs: function attrs () {
18132
18284
  return Object.assign({}, {'aria-expanded': this.showing === true ? 'true' : 'false',
18133
- 'aria-haspopup': 'true'},
18285
+ 'aria-haspopup': 'true',
18286
+ 'aria-controls': this.targetUid,
18287
+ 'aria-owns': this.targetUid},
18134
18288
  this.qAttrs)
18135
18289
  },
18136
18290
 
@@ -18198,9 +18352,14 @@
18198
18352
 
18199
18353
  h('div', {
18200
18354
  staticClass: 'q-fab__actions flex no-wrap inline',
18201
- class: this.actionsClasses
18355
+ class: this.actionsClasses,
18356
+ attrs: this.actionsAttrs
18202
18357
  }, slot(this, 'default'))
18203
18358
  ])
18359
+ },
18360
+
18361
+ created: function created () {
18362
+ this.targetUid = "fb_" + (uid());
18204
18363
  }
18205
18364
  });
18206
18365
 
@@ -18448,11 +18607,13 @@
18448
18607
 
18449
18608
  var index = ++this.validateIndex;
18450
18609
 
18451
- if (this.innerLoading !== true && this.lazyRules !== true) {
18452
- this.isDirty = true;
18453
- }
18610
+ var setDirty = this.innerLoading !== true
18611
+ ? function () { return this$1.isDirty !== true && (this$1.isDirty = true); }
18612
+ : function () {};
18454
18613
 
18455
18614
  var update = function (err, msg) {
18615
+ err === true && setDirty();
18616
+
18456
18617
  if (this$1.innerError !== err) {
18457
18618
  this$1.innerError = err;
18458
18619
  }
@@ -18541,81 +18702,8 @@
18541
18702
  }
18542
18703
  };
18543
18704
 
18544
- /**
18545
- * Based on the work of https://github.com/jchook/uuid-random
18546
- */
18547
-
18548
- var
18549
- buf,
18550
- bufIdx = 0;
18551
- var hexBytes = new Array(256);
18552
-
18553
- // Pre-calculate toString(16) for speed
18554
- for (var i = 0; i < 256; i++) {
18555
- hexBytes[i] = (i + 0x100).toString(16).substr(1);
18556
- }
18557
-
18558
- // Use best available PRNG
18559
- var randomBytes = (function () {
18560
- // Node & Browser support
18561
- var lib = typeof crypto !== 'undefined'
18562
- ? crypto
18563
- : (
18564
- typeof window !== 'undefined'
18565
- ? window.msCrypto // IE11
18566
- : void 0
18567
- );
18568
-
18569
- if (lib !== void 0) {
18570
- if (lib.randomBytes !== void 0) {
18571
- return lib.randomBytes
18572
- }
18573
- if (lib.getRandomValues !== void 0) {
18574
- return function (n) {
18575
- var bytes = new Uint8Array(n);
18576
- lib.getRandomValues(bytes);
18577
- return bytes
18578
- }
18579
- }
18580
- }
18581
-
18582
- return function (n) {
18583
- var r = [];
18584
- for (var i = n; i > 0; i--) {
18585
- r.push(Math.floor(Math.random() * 256));
18586
- }
18587
- return r
18588
- }
18589
- })();
18590
-
18591
- // Buffer random numbers for speed
18592
- // Reduce memory usage by decreasing this number (min 16)
18593
- // or improve speed by increasing this number (try 16384)
18594
- var BUFFER_SIZE = 4096;
18595
-
18596
- function uid$2 () {
18597
- // Buffer some random bytes for speed
18598
- if (buf === void 0 || (bufIdx + 16 > BUFFER_SIZE)) {
18599
- bufIdx = 0;
18600
- buf = randomBytes(BUFFER_SIZE);
18601
- }
18602
-
18603
- var b = Array.prototype.slice.call(buf, bufIdx, (bufIdx += 16));
18604
- b[6] = (b[6] & 0x0f) | 0x40;
18605
- b[8] = (b[8] & 0x3f) | 0x80;
18606
-
18607
- return hexBytes[b[0]] + hexBytes[b[1]] +
18608
- hexBytes[b[2]] + hexBytes[b[3]] + '-' +
18609
- hexBytes[b[4]] + hexBytes[b[5]] + '-' +
18610
- hexBytes[b[6]] + hexBytes[b[7]] + '-' +
18611
- hexBytes[b[8]] + hexBytes[b[9]] + '-' +
18612
- hexBytes[b[10]] + hexBytes[b[11]] +
18613
- hexBytes[b[12]] + hexBytes[b[13]] +
18614
- hexBytes[b[14]] + hexBytes[b[15]]
18615
- }
18616
-
18617
18705
  function getTargetUid (val) {
18618
- return val === void 0 ? ("f_" + (uid$2())) : val
18706
+ return val === void 0 ? ("f_" + (uid())) : val
18619
18707
  }
18620
18708
 
18621
18709
  var QField = Vue.extend({
@@ -19323,7 +19411,7 @@
19323
19411
  file.__key = file.webkitRelativePath + file.lastModified + file.name + file.size;
19324
19412
  });
19325
19413
 
19326
- if (append !== true) {
19414
+ if (append === true) {
19327
19415
  // Avoid duplicate files
19328
19416
  var filenameMap = currentFileList.map(function (entry) { return entry.__key; });
19329
19417
  files = filterFiles(files, rejectedFiles, 'duplicate', function (file) {
@@ -19972,88 +20060,79 @@
19972
20060
  validate: function validate (shouldFocus) {
19973
20061
  var this$1 = this;
19974
20062
 
19975
- var promises = [];
19976
20063
  var focus = typeof shouldFocus === 'boolean'
19977
20064
  ? shouldFocus
19978
20065
  : this.noErrorFocus !== true;
19979
20066
 
19980
20067
  var index = ++this.validateIndex;
19981
20068
 
19982
- var components = this.getValidationComponents().filter(function (c) { return c.disable !== true; });
20069
+ var registeredComponents = this.getValidationComponents().filter(function (c) { return c.disable !== true; });
19983
20070
 
19984
20071
  var emit = function (res, ref) {
19985
20072
  this$1.$emit('validation-' + (res === true ? 'success' : 'error'), ref);
19986
20073
  };
19987
20074
 
19988
- var loop = function ( i ) {
19989
- var comp = components[i];
20075
+ var validateComponent = function (comp) {
19990
20076
  var valid = comp.validate();
19991
20077
 
19992
- if (typeof valid.then === 'function') {
19993
- promises.push(
19994
- valid.then(
19995
- function (valid) { return ({ valid: valid, comp: comp }); },
19996
- function (err) { return ({ valid: false, comp: comp, err: err }); }
19997
- )
19998
- );
19999
- }
20000
- else if (valid !== true) {
20001
- if (this$1.greedy === false) {
20002
- emit(false, comp);
20003
-
20004
- if (focus === true && typeof comp.focus === 'function') {
20005
- comp.focus();
20006
- }
20007
-
20008
- return { v: Promise.resolve(false) }
20009
- }
20010
-
20011
- promises.push({ valid: false, comp: comp });
20012
- }
20078
+ return typeof valid.then === 'function'
20079
+ ? valid.then(
20080
+ function (valid) { return ({ valid: valid, comp: comp }); },
20081
+ function (err) { return ({ valid: false, comp: comp, err: err }); }
20082
+ )
20083
+ : Promise.resolve({ valid: valid, comp: comp })
20013
20084
  };
20014
20085
 
20015
- for (var i = 0; i < components.length; i++) {
20016
- var returned = loop( i );
20017
-
20018
- if ( returned ) return returned.v;
20019
- }
20020
-
20021
- if (promises.length === 0) {
20022
- emit(true);
20023
- return Promise.resolve(true)
20024
- }
20025
-
20026
- return Promise.all(promises).then(
20027
- function (res) {
20028
- var errors = res.filter(function (r) { return r.valid !== true; });
20086
+ var errorsPromise = this.greedy === true
20087
+ ? Promise
20088
+ .all(registeredComponents.map(validateComponent))
20089
+ .then(function (res) { return res.filter(function (r) { return r.valid !== true; }); })
20090
+ : registeredComponents
20091
+ .reduce(
20092
+ function (acc, comp) { return acc.then(function () {
20093
+ return validateComponent(comp).then(function (r) {
20094
+ if (r.valid === false) { return Promise.reject(r) }
20095
+ })
20096
+ }); },
20097
+ Promise.resolve()
20098
+ )
20099
+ .catch(function (error) { return [ error ]; });
20029
20100
 
20030
- if (errors.length === 0) {
20031
- index === this$1.validateIndex && emit(true);
20032
- return true
20033
- }
20101
+ return errorsPromise.then(function (errors) {
20102
+ if (errors.length === 0) {
20103
+ index === this$1.validateIndex && emit(true);
20104
+ return true
20105
+ }
20034
20106
 
20107
+ if (index === this$1.validateIndex) {
20035
20108
  var ref = errors[0];
20036
- var valid = ref.valid;
20037
20109
  var comp = ref.comp;
20038
20110
  var err = ref.err;
20039
20111
 
20040
- if (index === this$1.validateIndex) {
20041
- err !== void 0 && console.error(err);
20112
+ err !== void 0 && console.error(err);
20113
+ emit(false, comp);
20042
20114
 
20043
- emit(false, comp);
20115
+ if (focus === true) {
20116
+ // Try to focus first mounted and active component
20117
+ var activeError = errors.find(function (ref) {
20118
+ var comp = ref.comp;
20044
20119
 
20045
- if (
20046
- focus === true &&
20047
- valid !== true &&
20048
- typeof comp.focus === 'function'
20049
- ) {
20050
- comp.focus();
20120
+ return (
20121
+ typeof comp.focus === 'function' &&
20122
+ comp._isBeingDestroyed !== true &&
20123
+ comp._isDestroyed !== true &&
20124
+ comp._inactive !== true
20125
+ );
20126
+ });
20127
+
20128
+ if (activeError !== void 0) {
20129
+ activeError.comp.focus();
20051
20130
  }
20052
20131
  }
20053
-
20054
- return false
20055
20132
  }
20056
- )
20133
+
20134
+ return false
20135
+ })
20057
20136
  },
20058
20137
 
20059
20138
  resetValidation: function resetValidation () {
@@ -27377,6 +27456,7 @@
27377
27456
  tabindex: this.tabindex,
27378
27457
  role: 'combobox',
27379
27458
  'aria-label': this.label,
27459
+ 'aria-readonly': this.readonly === true ? 'true' : 'false',
27380
27460
  'aria-autocomplete': this.useInput === true ? 'list' : 'none',
27381
27461
  'aria-expanded': this.menu === true ? 'true' : 'false',
27382
27462
  'aria-owns': ((this.targetUid) + "_lb"),
@@ -27397,10 +27477,6 @@
27397
27477
  'aria-multiselectable': this.multiple === true ? 'true' : 'false'
27398
27478
  };
27399
27479
 
27400
- if (this.optionIndex >= 0) {
27401
- attrs['aria-activedescendant'] = (this.targetUid) + "_" + (this.optionIndex);
27402
- }
27403
-
27404
27480
  return attrs
27405
27481
  }
27406
27482
  },
@@ -33618,7 +33694,7 @@
33618
33694
 
33619
33695
  if (rowEl !== null) {
33620
33696
  var scrollTarget = this.$el.querySelector('.q-table__middle.scroll');
33621
- var offsetTop = rowEl.offsetTop;
33697
+ var offsetTop = rowEl.offsetTop - this.virtualScrollStickySizeStart;
33622
33698
  var direction = offsetTop < scrollTarget.scrollTop ? 'decrease' : 'increase';
33623
33699
 
33624
33700
  scrollTarget.scrollTop = offsetTop;
@@ -41096,6 +41172,129 @@
41096
41172
  return openWindow(url, reject, windowFeatures)
41097
41173
  }
41098
41174
 
41175
+ function parsePromises (sequentialPromises) {
41176
+ var isList = Array.isArray(sequentialPromises);
41177
+
41178
+ if (isList === true) {
41179
+ var totalJobs = sequentialPromises.length;
41180
+ return {
41181
+ isList: isList,
41182
+ totalJobs: totalJobs,
41183
+ resultAggregator: Array(totalJobs).fill(null)
41184
+ }
41185
+ }
41186
+
41187
+ var resultKeys = Object.keys(sequentialPromises);
41188
+ var resultAggregator = {};
41189
+ resultKeys.forEach(function (keyName) { resultAggregator[ keyName ] = null; });
41190
+
41191
+ return {
41192
+ isList: isList,
41193
+ totalJobs: resultKeys.length,
41194
+ resultAggregator: resultAggregator,
41195
+ resultKeys: resultKeys
41196
+ }
41197
+ }
41198
+
41199
+ /**
41200
+ * Run a list of Promises sequentially, optionally on multiple threads.
41201
+ *
41202
+ * @param {*} sequentialPromises - Array of Functions or Object with Functions as values
41203
+ * Array of Function form: [ (resultAggregator: Array) => Promise<any>, ... ]
41204
+ * Object form: { [key: string]: (resultAggregator: object) => Promise<any>, ... }
41205
+ * @param {*} opts - Optional options Object
41206
+ * Object form: { threadsNumber?: number, abortOnFail?: boolean }
41207
+ * Default: { threadsNumber: 1, abortOnFail: true }
41208
+ * When configuring threadsNumber AND using http requests, be
41209
+ * aware of the maximum threads that the hosting browser
41210
+ * supports (usually 3); any number of threads above that
41211
+ * won't add any real benefits
41212
+ * @returns Promise<Array<Object> | Object>
41213
+ * With opts.abortOnFail set to true (which is default):
41214
+ * When sequentialPromises param is Array:
41215
+ * The Promise resolves with an Array of Objects of the following form:
41216
+ * [ { key: number, status: 'fulfilled', value: any }, ... ]
41217
+ * The Promise rejects with an Object of the following form:
41218
+ * { key: number, status: 'rejected', reason: Error, resultAggregator: array }
41219
+ * When sequentialPromises param is Object:
41220
+ * The Promise resolves with an Object of the following form:
41221
+ * { [key: string]: { key: string, status: 'fulfilled', value: any }, ... }
41222
+ * The Promise rejects with an Object of the following form:
41223
+ * { key: string, status: 'rejected', reason: Error, resultAggregator: object }
41224
+ * With opts.abortOnFail set to false:
41225
+ * The Promise is never rejected (no catch() needed)
41226
+ * The Promise resolves with:
41227
+ * An Array of Objects (when sequentialPromises param is also an Array) of the following form:
41228
+ * [ { key: number, status: 'fulfilled', value: any } | { status: 'rejected', reason: Error }, ... ]
41229
+ * An Object (when sequentialPromises param is also an Object) of the following form:
41230
+ * { [key: string]: { key: string, status: 'fulfilled', value: any } | { key: string, status: 'rejected', reason: Error }, ... }
41231
+ */
41232
+ function runSequentialPromises (
41233
+ sequentialPromises,
41234
+ ref
41235
+ ) {
41236
+ if ( ref === void 0 ) ref = {};
41237
+ var threadsNumber = ref.threadsNumber; if ( threadsNumber === void 0 ) threadsNumber = 1;
41238
+ var abortOnFail = ref.abortOnFail; if ( abortOnFail === void 0 ) abortOnFail = true;
41239
+
41240
+ var jobIndex = -1, hasAborted = false;
41241
+
41242
+ var ref$1 = parsePromises(sequentialPromises);
41243
+ var isList = ref$1.isList;
41244
+ var totalJobs = ref$1.totalJobs;
41245
+ var resultAggregator = ref$1.resultAggregator;
41246
+ var resultKeys = ref$1.resultKeys;
41247
+
41248
+ var getPromiseThread = function () { return new Promise(function (resolve, reject) {
41249
+ function runNextPromise () {
41250
+ var currentJobIndex = ++jobIndex;
41251
+
41252
+ if (hasAborted === true || currentJobIndex >= totalJobs) {
41253
+ resolve();
41254
+ return
41255
+ }
41256
+
41257
+ var key = isList === true ? currentJobIndex : resultKeys[ currentJobIndex ];
41258
+
41259
+ sequentialPromises[ key ](resultAggregator)
41260
+ .then(function (value) {
41261
+ if (hasAborted === true) {
41262
+ resolve();
41263
+ return // early exit
41264
+ }
41265
+
41266
+ resultAggregator[ key ] = { key: key, status: 'fulfilled', value: value };
41267
+
41268
+ // timeout so it doesn't interfere with the .catch() below
41269
+ setTimeout(runNextPromise);
41270
+ })
41271
+ .catch(function (reason) {
41272
+ if (hasAborted === true) {
41273
+ resolve();
41274
+ return // early exit
41275
+ }
41276
+
41277
+ var result = { key: key, status: 'rejected', reason: reason };
41278
+ resultAggregator[ key ] = result;
41279
+
41280
+ if (abortOnFail === true) {
41281
+ hasAborted = true;
41282
+ reject(Object.assign({}, result, {resultAggregator: resultAggregator}));
41283
+ return // early exit
41284
+ }
41285
+
41286
+ // timeout so no interference
41287
+ setTimeout(runNextPromise);
41288
+ });
41289
+ }
41290
+
41291
+ runNextPromise();
41292
+ }); };
41293
+
41294
+ var threads = Array(threadsNumber).fill(getPromiseThread());
41295
+ return Promise.all(threads).then(function () { return resultAggregator; })
41296
+ }
41297
+
41099
41298
 
41100
41299
 
41101
41300
  var utils = /*#__PURE__*/Object.freeze({
@@ -41116,9 +41315,10 @@
41116
41315
  openURL: openUrl,
41117
41316
  morph: morph,
41118
41317
  patterns: patterns,
41318
+ runSequentialPromises: runSequentialPromises,
41119
41319
  scroll: scroll,
41120
41320
  throttle: throttle,
41121
- uid: uid$2
41321
+ uid: uid
41122
41322
  });
41123
41323
 
41124
41324
  Vue.use({ install: install }, {