quasar 1.20.0 → 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 (209) 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/QField.json +2 -1
  6. package/dist/api/QFile.json +2 -1
  7. package/dist/api/QInput.json +2 -1
  8. package/dist/api/QSelect.json +2 -1
  9. package/dist/api/QTable.json +2 -2
  10. package/dist/babel-transforms/imports.js +1 -0
  11. package/dist/icon-set/bootstrap-icons.umd.min.js +1 -1
  12. package/dist/icon-set/eva-icons.umd.min.js +1 -1
  13. package/dist/icon-set/fontawesome-v5-pro.umd.min.js +1 -1
  14. package/dist/icon-set/fontawesome-v5.umd.min.js +1 -1
  15. package/dist/icon-set/fontawesome-v6-pro.umd.min.js +1 -1
  16. package/dist/icon-set/fontawesome-v6.umd.min.js +1 -1
  17. package/dist/icon-set/ionicons-v4.umd.min.js +1 -1
  18. package/dist/icon-set/line-awesome.umd.min.js +1 -1
  19. package/dist/icon-set/material-icons-outlined.umd.min.js +1 -1
  20. package/dist/icon-set/material-icons-round.umd.min.js +1 -1
  21. package/dist/icon-set/material-icons-sharp.umd.min.js +1 -1
  22. package/dist/icon-set/material-icons.umd.min.js +1 -1
  23. package/dist/icon-set/material-symbols-outlined.umd.min.js +1 -1
  24. package/dist/icon-set/material-symbols-rounded.umd.min.js +1 -1
  25. package/dist/icon-set/material-symbols-sharp.umd.min.js +1 -1
  26. package/dist/icon-set/mdi-v3.umd.min.js +1 -1
  27. package/dist/icon-set/mdi-v4.umd.min.js +1 -1
  28. package/dist/icon-set/mdi-v5.umd.min.js +1 -1
  29. package/dist/icon-set/mdi-v6.umd.min.js +1 -1
  30. package/dist/icon-set/svg-bootstrap-icons.umd.min.js +1 -1
  31. package/dist/icon-set/svg-eva-icons.umd.min.js +1 -1
  32. package/dist/icon-set/svg-fontawesome-v5.umd.min.js +1 -1
  33. package/dist/icon-set/svg-fontawesome-v6.umd.min.js +1 -1
  34. package/dist/icon-set/svg-ionicons-v4.umd.min.js +1 -1
  35. package/dist/icon-set/svg-ionicons-v5.umd.min.js +1 -1
  36. package/dist/icon-set/svg-ionicons-v6.umd.min.js +1 -1
  37. package/dist/icon-set/svg-line-awesome.umd.min.js +1 -1
  38. package/dist/icon-set/svg-material-icons-outlined.umd.min.js +1 -1
  39. package/dist/icon-set/svg-material-icons-round.umd.min.js +1 -1
  40. package/dist/icon-set/svg-material-icons-sharp.umd.min.js +1 -1
  41. package/dist/icon-set/svg-material-icons.umd.min.js +1 -1
  42. package/dist/icon-set/svg-material-symbols-outlined.umd.min.js +1 -1
  43. package/dist/icon-set/svg-material-symbols-rounded.umd.min.js +1 -1
  44. package/dist/icon-set/svg-material-symbols-sharp.umd.min.js +1 -1
  45. package/dist/icon-set/svg-mdi-v4.umd.min.js +1 -1
  46. package/dist/icon-set/svg-mdi-v5.umd.min.js +1 -1
  47. package/dist/icon-set/svg-mdi-v6.umd.min.js +1 -1
  48. package/dist/icon-set/svg-themify.umd.min.js +1 -1
  49. package/dist/icon-set/themify.umd.min.js +1 -1
  50. package/dist/lang/ar.umd.min.js +2 -2
  51. package/dist/lang/az-latn.umd.min.js +2 -2
  52. package/dist/lang/bg.umd.min.js +2 -2
  53. package/dist/lang/ca.umd.min.js +2 -2
  54. package/dist/lang/cs.umd.min.js +2 -2
  55. package/dist/lang/da.umd.min.js +2 -2
  56. package/dist/lang/de.umd.min.js +2 -2
  57. package/dist/lang/el.umd.min.js +2 -2
  58. package/dist/lang/en-gb.umd.min.js +2 -2
  59. package/dist/lang/en-us.umd.min.js +2 -2
  60. package/dist/lang/eo.umd.min.js +2 -2
  61. package/dist/lang/es.umd.min.js +2 -2
  62. package/dist/lang/et.umd.min.js +2 -2
  63. package/dist/lang/eu.umd.min.js +2 -2
  64. package/dist/lang/fa-ir.umd.min.js +2 -2
  65. package/dist/lang/fa.umd.min.js +2 -2
  66. package/dist/lang/fi.umd.min.js +2 -2
  67. package/dist/lang/fr.umd.min.js +2 -2
  68. package/dist/lang/gn.umd.min.js +2 -2
  69. package/dist/lang/he.umd.min.js +2 -2
  70. package/dist/lang/hr.umd.min.js +2 -2
  71. package/dist/lang/hu.umd.min.js +2 -2
  72. package/dist/lang/id.umd.min.js +2 -2
  73. package/dist/lang/is.umd.min.js +2 -2
  74. package/dist/lang/it.umd.min.js +2 -2
  75. package/dist/lang/ja.umd.min.js +2 -2
  76. package/dist/lang/km.umd.min.js +2 -2
  77. package/dist/lang/ko-kr.umd.min.js +2 -2
  78. package/dist/lang/kur-ckb.umd.min.js +2 -2
  79. package/dist/lang/kz.umd.min.js +2 -2
  80. package/dist/lang/lu.umd.min.js +2 -2
  81. package/dist/lang/lv.umd.min.js +2 -2
  82. package/dist/lang/ml.umd.min.js +2 -2
  83. package/dist/lang/mm.umd.min.js +2 -2
  84. package/dist/lang/ms.umd.min.js +2 -2
  85. package/dist/lang/my.umd.min.js +2 -2
  86. package/dist/lang/nb-no.umd.min.js +2 -2
  87. package/dist/lang/nl.umd.min.js +2 -2
  88. package/dist/lang/pl.umd.min.js +2 -2
  89. package/dist/lang/pt-br.umd.min.js +2 -2
  90. package/dist/lang/pt.umd.min.js +2 -2
  91. package/dist/lang/ro.umd.min.js +2 -2
  92. package/dist/lang/ru.umd.min.js +2 -2
  93. package/dist/lang/sk.umd.min.js +2 -2
  94. package/dist/lang/sl.umd.min.js +2 -2
  95. package/dist/lang/sm.umd.min.js +2 -2
  96. package/dist/lang/sr.umd.min.js +2 -2
  97. package/dist/lang/sv.umd.min.js +2 -2
  98. package/dist/lang/ta.umd.min.js +2 -2
  99. package/dist/lang/th.umd.min.js +2 -2
  100. package/dist/lang/tr.umd.min.js +2 -2
  101. package/dist/lang/ug.umd.min.js +2 -2
  102. package/dist/lang/uk.umd.min.js +2 -2
  103. package/dist/lang/uz-Cyrl.umd.min.js +2 -2
  104. package/dist/lang/uz-Latn.umd.min.js +2 -2
  105. package/dist/lang/vi.umd.min.js +2 -2
  106. package/dist/lang/zh-hans.umd.min.js +2 -2
  107. package/dist/lang/zh-hant.umd.min.js +2 -2
  108. package/dist/quasar.addon.css +1 -1
  109. package/dist/quasar.addon.rtl.css +1 -1
  110. package/dist/quasar.common.js +2 -2
  111. package/dist/quasar.css +1 -1
  112. package/dist/quasar.esm.js +2 -2
  113. package/dist/quasar.ie.polyfills.js +1 -1
  114. package/dist/quasar.ie.polyfills.umd.min.js +1 -1
  115. package/dist/quasar.rtl.css +1 -1
  116. package/dist/quasar.sass +1 -1
  117. package/dist/quasar.styl +1 -1
  118. package/dist/quasar.umd.js +396 -180
  119. package/dist/quasar.umd.min.js +2 -2
  120. package/dist/quasar.umd.modern.js +381 -171
  121. package/dist/quasar.umd.modern.min.js +2 -2
  122. package/dist/types/index.d.ts +21 -1
  123. package/dist/types/utils/is.d.ts +67 -0
  124. package/dist/types/utils/run-sequential-promises.d.ts +119 -0
  125. package/dist/types/utils.d.ts +2 -0
  126. package/dist/vetur/quasar-attributes.json +21 -1
  127. package/dist/vetur/quasar-tags.json +6 -1
  128. package/dist/web-types/web-types.json +77 -6
  129. package/lang/ar.js +3 -1
  130. package/lang/az-latn.js +3 -1
  131. package/lang/bg.js +3 -1
  132. package/lang/ca.js +3 -1
  133. package/lang/cs.js +3 -1
  134. package/lang/da.js +3 -1
  135. package/lang/de.js +3 -1
  136. package/lang/el.js +3 -1
  137. package/lang/en-gb.js +3 -1
  138. package/lang/en-us.js +3 -1
  139. package/lang/eo.js +3 -1
  140. package/lang/es.js +3 -1
  141. package/lang/et.js +3 -1
  142. package/lang/eu.js +3 -1
  143. package/lang/fa-ir.js +3 -1
  144. package/lang/fa.js +3 -1
  145. package/lang/fi.js +3 -1
  146. package/lang/fr.js +3 -1
  147. package/lang/gn.js +3 -1
  148. package/lang/he.js +3 -1
  149. package/lang/hr.js +3 -1
  150. package/lang/hu.js +3 -1
  151. package/lang/id.js +3 -1
  152. package/lang/is.js +3 -1
  153. package/lang/it.js +3 -1
  154. package/lang/ja.js +3 -1
  155. package/lang/km.js +3 -1
  156. package/lang/ko-kr.js +3 -1
  157. package/lang/kur-ckb.js +3 -1
  158. package/lang/kz.js +3 -1
  159. package/lang/lu.js +3 -1
  160. package/lang/lv.js +3 -1
  161. package/lang/ml.js +3 -1
  162. package/lang/mm.js +3 -1
  163. package/lang/ms.js +3 -1
  164. package/lang/my.js +3 -1
  165. package/lang/nb-no.js +3 -1
  166. package/lang/nl.js +3 -1
  167. package/lang/pl.js +3 -1
  168. package/lang/pt-br.js +3 -1
  169. package/lang/pt.js +3 -1
  170. package/lang/ro.js +3 -1
  171. package/lang/ru.js +3 -1
  172. package/lang/sk.js +3 -1
  173. package/lang/sl.js +3 -1
  174. package/lang/sm.js +3 -1
  175. package/lang/sr.js +3 -1
  176. package/lang/sv.js +3 -1
  177. package/lang/ta.js +3 -1
  178. package/lang/th.js +3 -1
  179. package/lang/tr.js +3 -1
  180. package/lang/ug.js +3 -1
  181. package/lang/uk.js +3 -1
  182. package/lang/uz-Cyrl.js +3 -1
  183. package/lang/uz-Latn.js +3 -1
  184. package/lang/vi.js +3 -1
  185. package/lang/zh-hans.js +3 -1
  186. package/lang/zh-hant.js +3 -1
  187. package/package.json +1 -1
  188. package/src/components/btn-dropdown/QBtnDropdown.js +17 -4
  189. package/src/components/btn-dropdown/QBtnDropdown.json +8 -0
  190. package/src/components/chip/QChip.js +8 -1
  191. package/src/components/chip/QChip.json +8 -0
  192. package/src/components/circular-progress/QCircularProgress.js +5 -2
  193. package/src/components/circular-progress/QCircularProgress.json +7 -0
  194. package/src/components/dialog/QDialog.js +7 -1
  195. package/src/components/expansion-item/QExpansionItem.js +38 -3
  196. package/src/components/expansion-item/QExpansionItem.json +67 -0
  197. package/src/components/fab/QFab.js +24 -1
  198. package/src/components/form/QForm.js +43 -49
  199. package/src/components/input/QInput.js +18 -15
  200. package/src/components/menu/QMenu.js +1 -0
  201. package/src/components/select/QSelect.js +1 -4
  202. package/src/components/table/QTable.js +1 -1
  203. package/src/components/table/QTable.json +2 -2
  204. package/src/mixins/file.js +7 -5
  205. package/src/mixins/validate.js +6 -4
  206. package/src/mixins/validate.json +2 -1
  207. package/src/utils/is.js +8 -0
  208. package/src/utils/run-sequential-promises.js +115 -0
  209. package/src/utils.js +4 -0
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v1.20.0
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.0";
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
  }
@@ -7058,6 +7146,14 @@
7058
7146
  return typeof v === 'number' && isFinite(v)
7059
7147
  }
7060
7148
 
7149
+ var is = {
7150
+ deepEqual: isDeepEqual,
7151
+ object: isObject,
7152
+ date: isDate,
7153
+ regexp: isRegexp,
7154
+ number: isNumber
7155
+ };
7156
+
7061
7157
  var QCarousel = Vue.extend({
7062
7158
  name: 'QCarousel',
7063
7159
 
@@ -7916,6 +8012,8 @@
7916
8012
  clickable: Boolean,
7917
8013
  removable: Boolean,
7918
8014
 
8015
+ removeAriaLabel: String,
8016
+
7919
8017
  tabindex: [String, Number],
7920
8018
  disable: Boolean
7921
8019
  },
@@ -7952,7 +8050,12 @@
7952
8050
  attrs: function attrs () {
7953
8051
  return this.disable === true
7954
8052
  ? { tabindex: -1, 'aria-disabled': 'true' }
7955
- : { 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
+ }
7956
8059
  }
7957
8060
  },
7958
8061
 
@@ -8077,6 +8180,7 @@
8077
8180
  trackColor: String,
8078
8181
 
8079
8182
  fontSize: String,
8183
+ rounded: Boolean,
8080
8184
 
8081
8185
  // ratio
8082
8186
  thickness: {
@@ -8151,6 +8255,7 @@
8151
8255
  var offset = ref.offset;
8152
8256
  var color = ref.color;
8153
8257
  var cls = ref.cls;
8258
+ var rounded = ref.rounded;
8154
8259
 
8155
8260
  return h('circle', {
8156
8261
  staticClass: 'q-circular-progress__' + cls,
@@ -8162,6 +8267,7 @@
8162
8267
  'stroke-width': thickness,
8163
8268
  'stroke-dasharray': strokeDashArray,
8164
8269
  'stroke-dashoffset': offset,
8270
+ 'stroke-linecap': rounded,
8165
8271
  cx: this.viewBox,
8166
8272
  cy: this.viewBox,
8167
8273
  r: radius
@@ -8200,7 +8306,8 @@
8200
8306
  cls: 'circle',
8201
8307
  thickness: this.strokeWidth,
8202
8308
  offset: this.strokeDashOffset,
8203
- color: this.color
8309
+ color: this.color,
8310
+ rounded: this.rounded === true ? 'round' : void 0
8204
8311
  })
8205
8312
  );
8206
8313
 
@@ -8401,7 +8508,7 @@
8401
8508
  }
8402
8509
  }
8403
8510
 
8404
- var uid = 0;
8511
+ var uid$1 = 0;
8405
8512
 
8406
8513
  var TouchPan = {
8407
8514
  name: 'touch-pan',
@@ -8431,7 +8538,7 @@
8431
8538
  }
8432
8539
 
8433
8540
  var ctx = {
8434
- uid: 'qvtp_' + (uid++),
8541
+ uid: 'qvtp_' + (uid$1++),
8435
8542
  handler: value,
8436
8543
  modifiers: modifiers,
8437
8544
  direction: getModifierDirections(modifiers),
@@ -10343,7 +10450,7 @@
10343
10450
  }
10344
10451
  });
10345
10452
 
10346
- var uid$1 = 0;
10453
+ var uid$2 = 0;
10347
10454
 
10348
10455
  var QTab = Vue.extend({
10349
10456
  name: 'QTab',
@@ -10370,7 +10477,7 @@
10370
10477
 
10371
10478
  name: {
10372
10479
  type: [Number, String],
10373
- default: function () { return ("t_" + (uid$1++)); }
10480
+ default: function () { return ("t_" + (uid$2++)); }
10374
10481
  },
10375
10482
 
10376
10483
  noCaps: Boolean,
@@ -14772,6 +14879,12 @@
14772
14879
  }
14773
14880
 
14774
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
14775
14888
  }
14776
14889
  },
14777
14890
 
@@ -14972,7 +15085,7 @@
14972
15085
  staticClass: ("q-dialog fullscreen no-pointer-events q-dialog--" + (this.useBackdrop === true ? 'modal' : 'seamless')),
14973
15086
  class: this.contentClass,
14974
15087
  style: this.contentStyle,
14975
- attrs: this.qAttrs
15088
+ attrs: this.attrs
14976
15089
  }, [
14977
15090
  h('transition', {
14978
15091
  props: { name: 'q-transition--fade' }
@@ -17707,6 +17820,7 @@
17707
17820
 
17708
17821
  dense: Boolean,
17709
17822
 
17823
+ toggleAriaLabel: String,
17710
17824
  expandIcon: String,
17711
17825
  expandedIcon: String,
17712
17826
  expandIconClass: [ Array, String, Object ],
@@ -17717,6 +17831,7 @@
17717
17831
 
17718
17832
  expandSeparator: Boolean,
17719
17833
  defaultOpened: Boolean,
17834
+ hideExpandIcon: Boolean,
17720
17835
  expandIconToggle: Boolean,
17721
17836
  switchToggleSide: Boolean,
17722
17837
  denseToggle: Boolean,
@@ -17777,6 +17892,30 @@
17777
17892
 
17778
17893
  activeToggleIcon: function activeToggleIcon () {
17779
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
+ }
17780
17919
  }
17781
17920
  },
17782
17921
 
@@ -17822,7 +17961,8 @@
17822
17961
 
17823
17962
  if (this.activeToggleIcon === true) {
17824
17963
  Object.assign(data, {
17825
- attrs: { tabindex: 0 },
17964
+ attrs: Object.assign({}, {tabindex: 0},
17965
+ this.toggleAriaAttrs),
17826
17966
  on: cache(this, 'inpExt', {
17827
17967
  click: this.__toggleIcon,
17828
17968
  keyup: this.__toggleIconKeyboard
@@ -17845,7 +17985,7 @@
17845
17985
  var child;
17846
17986
 
17847
17987
  if (this.$scopedSlots.header !== void 0) {
17848
- child = [].concat(this.$scopedSlots.header({ expanded: this.showing === true }));
17988
+ child = [].concat(this.$scopedSlots.header(this.headerSlotScope));
17849
17989
  }
17850
17990
  else {
17851
17991
  child = [
@@ -17876,7 +18016,7 @@
17876
18016
  );
17877
18017
  }
17878
18018
 
17879
- this.disable !== true && child[this.switchToggleSide === true ? 'unshift' : 'push'](
18019
+ this.disable !== true && this.hideExpandIcon !== true && child[this.switchToggleSide === true ? 'unshift' : 'push'](
17880
18020
  this.__getToggleIcon(h)
17881
18021
  );
17882
18022
 
@@ -17905,6 +18045,9 @@
17905
18045
 
17906
18046
  data.attrs = this.linkProps.attrs;
17907
18047
  }
18048
+ else {
18049
+ data.attrs = this.toggleAriaAttrs;
18050
+ }
17908
18051
  }
17909
18052
 
17910
18053
  return h(QItem, data, child)
@@ -17926,6 +18069,7 @@
17926
18069
  h('div', {
17927
18070
  staticClass: 'q-expansion-item__content relative-position',
17928
18071
  style: this.contentStyle,
18072
+ attrs: { id: this.targetUid },
17929
18073
  directives: [{ name: 'show', value: this.showing }]
17930
18074
  }, slot(this, 'default'))
17931
18075
  ])
@@ -17963,6 +18107,7 @@
17963
18107
 
17964
18108
  created: function created () {
17965
18109
  this.group !== void 0 && this.$root.$on(eventName, this.__eventHandler);
18110
+ this.targetUid = "e_" + (uid());
17966
18111
  },
17967
18112
 
17968
18113
  beforeDestroy: function beforeDestroy () {
@@ -18116,13 +18261,30 @@
18116
18261
  return "q-fab__actions--" + (this.direction) + (this.showing === true ? ' q-fab__actions--opened' : '')
18117
18262
  },
18118
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
+
18119
18279
  iconHolderClasses: function iconHolderClasses () {
18120
18280
  return this.showing === true ? 'q-fab__icon-holder--opened' : ''
18121
18281
  },
18122
18282
 
18123
18283
  attrs: function attrs () {
18124
18284
  return Object.assign({}, {'aria-expanded': this.showing === true ? 'true' : 'false',
18125
- 'aria-haspopup': 'true'},
18285
+ 'aria-haspopup': 'true',
18286
+ 'aria-controls': this.targetUid,
18287
+ 'aria-owns': this.targetUid},
18126
18288
  this.qAttrs)
18127
18289
  },
18128
18290
 
@@ -18190,9 +18352,14 @@
18190
18352
 
18191
18353
  h('div', {
18192
18354
  staticClass: 'q-fab__actions flex no-wrap inline',
18193
- class: this.actionsClasses
18355
+ class: this.actionsClasses,
18356
+ attrs: this.actionsAttrs
18194
18357
  }, slot(this, 'default'))
18195
18358
  ])
18359
+ },
18360
+
18361
+ created: function created () {
18362
+ this.targetUid = "fb_" + (uid());
18196
18363
  }
18197
18364
  });
18198
18365
 
@@ -18440,11 +18607,13 @@
18440
18607
 
18441
18608
  var index = ++this.validateIndex;
18442
18609
 
18443
- if (this.innerLoading !== true && this.lazyRules !== true) {
18444
- this.isDirty = true;
18445
- }
18610
+ var setDirty = this.innerLoading !== true
18611
+ ? function () { return this$1.isDirty !== true && (this$1.isDirty = true); }
18612
+ : function () {};
18446
18613
 
18447
18614
  var update = function (err, msg) {
18615
+ err === true && setDirty();
18616
+
18448
18617
  if (this$1.innerError !== err) {
18449
18618
  this$1.innerError = err;
18450
18619
  }
@@ -18467,7 +18636,7 @@
18467
18636
  var res = (void 0);
18468
18637
 
18469
18638
  if (typeof rule === 'function') {
18470
- res = rule(val);
18639
+ res = rule(val, testPattern);
18471
18640
  }
18472
18641
  else if (typeof rule === 'string' && testPattern[rule] !== void 0) {
18473
18642
  res = testPattern[rule](val);
@@ -18533,81 +18702,8 @@
18533
18702
  }
18534
18703
  };
18535
18704
 
18536
- /**
18537
- * Based on the work of https://github.com/jchook/uuid-random
18538
- */
18539
-
18540
- var
18541
- buf,
18542
- bufIdx = 0;
18543
- var hexBytes = new Array(256);
18544
-
18545
- // Pre-calculate toString(16) for speed
18546
- for (var i = 0; i < 256; i++) {
18547
- hexBytes[i] = (i + 0x100).toString(16).substr(1);
18548
- }
18549
-
18550
- // Use best available PRNG
18551
- var randomBytes = (function () {
18552
- // Node & Browser support
18553
- var lib = typeof crypto !== 'undefined'
18554
- ? crypto
18555
- : (
18556
- typeof window !== 'undefined'
18557
- ? window.msCrypto // IE11
18558
- : void 0
18559
- );
18560
-
18561
- if (lib !== void 0) {
18562
- if (lib.randomBytes !== void 0) {
18563
- return lib.randomBytes
18564
- }
18565
- if (lib.getRandomValues !== void 0) {
18566
- return function (n) {
18567
- var bytes = new Uint8Array(n);
18568
- lib.getRandomValues(bytes);
18569
- return bytes
18570
- }
18571
- }
18572
- }
18573
-
18574
- return function (n) {
18575
- var r = [];
18576
- for (var i = n; i > 0; i--) {
18577
- r.push(Math.floor(Math.random() * 256));
18578
- }
18579
- return r
18580
- }
18581
- })();
18582
-
18583
- // Buffer random numbers for speed
18584
- // Reduce memory usage by decreasing this number (min 16)
18585
- // or improve speed by increasing this number (try 16384)
18586
- var BUFFER_SIZE = 4096;
18587
-
18588
- function uid$2 () {
18589
- // Buffer some random bytes for speed
18590
- if (buf === void 0 || (bufIdx + 16 > BUFFER_SIZE)) {
18591
- bufIdx = 0;
18592
- buf = randomBytes(BUFFER_SIZE);
18593
- }
18594
-
18595
- var b = Array.prototype.slice.call(buf, bufIdx, (bufIdx += 16));
18596
- b[6] = (b[6] & 0x0f) | 0x40;
18597
- b[8] = (b[8] & 0x3f) | 0x80;
18598
-
18599
- return hexBytes[b[0]] + hexBytes[b[1]] +
18600
- hexBytes[b[2]] + hexBytes[b[3]] + '-' +
18601
- hexBytes[b[4]] + hexBytes[b[5]] + '-' +
18602
- hexBytes[b[6]] + hexBytes[b[7]] + '-' +
18603
- hexBytes[b[8]] + hexBytes[b[9]] + '-' +
18604
- hexBytes[b[10]] + hexBytes[b[11]] +
18605
- hexBytes[b[12]] + hexBytes[b[13]] +
18606
- hexBytes[b[14]] + hexBytes[b[15]]
18607
- }
18608
-
18609
18705
  function getTargetUid (val) {
18610
- return val === void 0 ? ("f_" + (uid$2())) : val
18706
+ return val === void 0 ? ("f_" + (uid())) : val
18611
18707
  }
18612
18708
 
18613
18709
  var QField = Vue.extend({
@@ -19315,11 +19411,13 @@
19315
19411
  file.__key = file.webkitRelativePath + file.lastModified + file.name + file.size;
19316
19412
  });
19317
19413
 
19318
- // Avoid duplicate files
19319
- var filenameMap = currentFileList.map(function (entry) { return entry.__key; });
19320
- files = filterFiles(files, rejectedFiles, 'duplicate', function (file) {
19321
- return filenameMap.includes(file.__key) === false
19322
- });
19414
+ if (append === true) {
19415
+ // Avoid duplicate files
19416
+ var filenameMap = currentFileList.map(function (entry) { return entry.__key; });
19417
+ files = filterFiles(files, rejectedFiles, 'duplicate', function (file) {
19418
+ return filenameMap.includes(file.__key) === false
19419
+ });
19420
+ }
19323
19421
 
19324
19422
  if (files.length === 0) { return done() }
19325
19423
 
@@ -19962,88 +20060,79 @@
19962
20060
  validate: function validate (shouldFocus) {
19963
20061
  var this$1 = this;
19964
20062
 
19965
- var promises = [];
19966
20063
  var focus = typeof shouldFocus === 'boolean'
19967
20064
  ? shouldFocus
19968
20065
  : this.noErrorFocus !== true;
19969
20066
 
19970
20067
  var index = ++this.validateIndex;
19971
20068
 
19972
- var components = this.getValidationComponents().filter(function (c) { return c.disable !== true; });
20069
+ var registeredComponents = this.getValidationComponents().filter(function (c) { return c.disable !== true; });
19973
20070
 
19974
20071
  var emit = function (res, ref) {
19975
20072
  this$1.$emit('validation-' + (res === true ? 'success' : 'error'), ref);
19976
20073
  };
19977
20074
 
19978
- var loop = function ( i ) {
19979
- var comp = components[i];
20075
+ var validateComponent = function (comp) {
19980
20076
  var valid = comp.validate();
19981
20077
 
19982
- if (typeof valid.then === 'function') {
19983
- promises.push(
19984
- valid.then(
19985
- function (valid) { return ({ valid: valid, comp: comp }); },
19986
- function (err) { return ({ valid: false, comp: comp, err: err }); }
19987
- )
19988
- );
19989
- }
19990
- else if (valid !== true) {
19991
- if (this$1.greedy === false) {
19992
- emit(false, comp);
19993
-
19994
- if (focus === true && typeof comp.focus === 'function') {
19995
- comp.focus();
19996
- }
19997
-
19998
- return { v: Promise.resolve(false) }
19999
- }
20000
-
20001
- promises.push({ valid: false, comp: comp });
20002
- }
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 })
20003
20084
  };
20004
20085
 
20005
- for (var i = 0; i < components.length; i++) {
20006
- var returned = loop( i );
20007
-
20008
- if ( returned ) return returned.v;
20009
- }
20010
-
20011
- if (promises.length === 0) {
20012
- emit(true);
20013
- return Promise.resolve(true)
20014
- }
20015
-
20016
- return Promise.all(promises).then(
20017
- function (res) {
20018
- 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 ]; });
20019
20100
 
20020
- if (errors.length === 0) {
20021
- index === this$1.validateIndex && emit(true);
20022
- return true
20023
- }
20101
+ return errorsPromise.then(function (errors) {
20102
+ if (errors.length === 0) {
20103
+ index === this$1.validateIndex && emit(true);
20104
+ return true
20105
+ }
20024
20106
 
20107
+ if (index === this$1.validateIndex) {
20025
20108
  var ref = errors[0];
20026
- var valid = ref.valid;
20027
20109
  var comp = ref.comp;
20028
20110
  var err = ref.err;
20029
20111
 
20030
- if (index === this$1.validateIndex) {
20031
- err !== void 0 && console.error(err);
20112
+ err !== void 0 && console.error(err);
20113
+ emit(false, comp);
20032
20114
 
20033
- 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;
20034
20119
 
20035
- if (
20036
- focus === true &&
20037
- valid !== true &&
20038
- typeof comp.focus === 'function'
20039
- ) {
20040
- 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();
20041
20130
  }
20042
20131
  }
20043
-
20044
- return false
20045
20132
  }
20046
- )
20133
+
20134
+ return false
20135
+ })
20047
20136
  },
20048
20137
 
20049
20138
  resetValidation: function resetValidation () {
@@ -21792,22 +21881,27 @@
21792
21881
 
21793
21882
  // textarea only
21794
21883
  __adjustHeight: function __adjustHeight () {
21795
- var inp = this.$refs.input;
21796
- if (inp !== void 0) {
21797
- var parentStyle = inp.parentNode.style;
21798
- var ref = inp.style;
21799
- var overflow = ref.overflow;
21800
-
21801
- // reset height of textarea to a small size to detect the real height
21802
- // but keep the total control size the same
21803
- parentStyle.marginBottom = (inp.scrollHeight - 1) + 'px';
21804
- inp.style.height = '1px';
21805
- inp.style.overflow = 'hidden';
21884
+ var this$1 = this;
21806
21885
 
21807
- inp.style.height = inp.scrollHeight + 'px';
21808
- inp.style.overflow = overflow;
21809
- parentStyle.marginBottom = '';
21810
- }
21886
+ requestAnimationFrame(function () {
21887
+ var inp = this$1.$refs.input;
21888
+ if (inp !== void 0) {
21889
+ var parentStyle = inp.parentNode.style;
21890
+ var ref = inp.style;
21891
+ var overflow = ref.overflow;
21892
+
21893
+ // reset height of textarea to a small size to detect the real height
21894
+ // but keep the total control size the same
21895
+ // Firefox rulez #14263, #14344
21896
+ this$1.$q.platform.is.firefox !== true && (inp.style.overflow = 'hidden');
21897
+ inp.style.height = '1px';
21898
+ parentStyle.marginBottom = (inp.scrollHeight - 1) + 'px';
21899
+
21900
+ inp.style.height = inp.scrollHeight + 'px';
21901
+ inp.style.overflow = overflow;
21902
+ parentStyle.marginBottom = '';
21903
+ }
21904
+ });
21811
21905
  },
21812
21906
 
21813
21907
  __onChange: function __onChange (e) {
@@ -27362,6 +27456,7 @@
27362
27456
  tabindex: this.tabindex,
27363
27457
  role: 'combobox',
27364
27458
  'aria-label': this.label,
27459
+ 'aria-readonly': this.readonly === true ? 'true' : 'false',
27365
27460
  'aria-autocomplete': this.useInput === true ? 'list' : 'none',
27366
27461
  'aria-expanded': this.menu === true ? 'true' : 'false',
27367
27462
  'aria-owns': ((this.targetUid) + "_lb"),
@@ -27382,10 +27477,6 @@
27382
27477
  'aria-multiselectable': this.multiple === true ? 'true' : 'false'
27383
27478
  };
27384
27479
 
27385
- if (this.optionIndex >= 0) {
27386
- attrs['aria-activedescendant'] = (this.targetUid) + "_" + (this.optionIndex);
27387
- }
27388
-
27389
27480
  return attrs
27390
27481
  }
27391
27482
  },
@@ -33603,7 +33694,7 @@
33603
33694
 
33604
33695
  if (rowEl !== null) {
33605
33696
  var scrollTarget = this.$el.querySelector('.q-table__middle.scroll');
33606
- var offsetTop = rowEl.offsetTop;
33697
+ var offsetTop = rowEl.offsetTop - this.virtualScrollStickySizeStart;
33607
33698
  var direction = offsetTop < scrollTarget.scrollTop ? 'decrease' : 'increase';
33608
33699
 
33609
33700
  scrollTarget.scrollTop = offsetTop;
@@ -41081,6 +41172,129 @@
41081
41172
  return openWindow(url, reject, windowFeatures)
41082
41173
  }
41083
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
+
41084
41298
 
41085
41299
 
41086
41300
  var utils = /*#__PURE__*/Object.freeze({
@@ -41097,12 +41311,14 @@
41097
41311
  format: format,
41098
41312
  frameDebounce: frameDebounce,
41099
41313
  noop: noop,
41314
+ is: is,
41100
41315
  openURL: openUrl,
41101
41316
  morph: morph,
41102
41317
  patterns: patterns,
41318
+ runSequentialPromises: runSequentialPromises,
41103
41319
  scroll: scroll,
41104
41320
  throttle: throttle,
41105
- uid: uid$2
41321
+ uid: uid
41106
41322
  });
41107
41323
 
41108
41324
  Vue.use({ install: install }, {