quasar 2.1.4 → 2.1.8

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 (131) hide show
  1. package/dist/api/Loading.json +5 -2
  2. package/dist/api/QColor.json +9 -2
  3. package/dist/api/QDate.json +5 -2
  4. package/dist/api/QFile.json +3 -1
  5. package/dist/api/QImg.json +15 -0
  6. package/dist/api/QInput.json +5 -2
  7. package/dist/api/QRadio.json +3 -1
  8. package/dist/api/QRange.json +13 -3
  9. package/dist/api/QSelect.json +3 -1
  10. package/dist/api/QSlider.json +9 -2
  11. package/dist/api/QTabs.json +3 -1
  12. package/dist/api/QTime.json +9 -2
  13. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  14. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  15. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  16. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  17. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  18. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  19. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  20. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  21. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  22. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  23. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  24. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  25. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  26. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-mdi-v4.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-mdi-v5.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  40. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  41. package/dist/icon-set/themify.umd.prod.js +1 -1
  42. package/dist/lang/ar.umd.prod.js +1 -1
  43. package/dist/lang/az-Latn.umd.prod.js +1 -1
  44. package/dist/lang/bg.umd.prod.js +1 -1
  45. package/dist/lang/bn.umd.prod.js +1 -1
  46. package/dist/lang/ca.umd.prod.js +1 -1
  47. package/dist/lang/cs.umd.prod.js +1 -1
  48. package/dist/lang/da.umd.prod.js +1 -1
  49. package/dist/lang/de.umd.prod.js +1 -1
  50. package/dist/lang/el.umd.prod.js +1 -1
  51. package/dist/lang/en-GB.umd.prod.js +1 -1
  52. package/dist/lang/en-US.umd.prod.js +1 -1
  53. package/dist/lang/eo.umd.prod.js +1 -1
  54. package/dist/lang/es.umd.prod.js +1 -1
  55. package/dist/lang/et.umd.prod.js +1 -1
  56. package/dist/lang/fa-IR.umd.prod.js +1 -1
  57. package/dist/lang/fa.umd.prod.js +1 -1
  58. package/dist/lang/fi.umd.prod.js +1 -1
  59. package/dist/lang/fr.umd.prod.js +1 -1
  60. package/dist/lang/gn.umd.prod.js +1 -1
  61. package/dist/lang/he.umd.prod.js +1 -1
  62. package/dist/lang/hr.umd.prod.js +1 -1
  63. package/dist/lang/hu.umd.prod.js +1 -1
  64. package/dist/lang/id.umd.prod.js +1 -1
  65. package/dist/lang/is.umd.prod.js +1 -1
  66. package/dist/lang/it.umd.prod.js +1 -1
  67. package/dist/lang/ja.umd.prod.js +1 -1
  68. package/dist/lang/km.umd.prod.js +1 -1
  69. package/dist/lang/ko-KR.umd.prod.js +1 -1
  70. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  71. package/dist/lang/lu.umd.prod.js +1 -1
  72. package/dist/lang/lv.umd.prod.js +1 -1
  73. package/dist/lang/ml.umd.prod.js +1 -1
  74. package/dist/lang/ms.umd.prod.js +1 -1
  75. package/dist/lang/nb-NO.umd.prod.js +1 -1
  76. package/dist/lang/nl.umd.prod.js +1 -1
  77. package/dist/lang/pl.umd.prod.js +1 -1
  78. package/dist/lang/pt-BR.umd.prod.js +1 -1
  79. package/dist/lang/pt.umd.prod.js +1 -1
  80. package/dist/lang/ro.umd.prod.js +1 -1
  81. package/dist/lang/ru.umd.prod.js +1 -1
  82. package/dist/lang/sk.umd.prod.js +1 -1
  83. package/dist/lang/sl.umd.prod.js +1 -1
  84. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  85. package/dist/lang/sr.umd.prod.js +1 -1
  86. package/dist/lang/sv.umd.prod.js +1 -1
  87. package/dist/lang/ta.umd.prod.js +1 -1
  88. package/dist/lang/th.umd.prod.js +1 -1
  89. package/dist/lang/tr.umd.prod.js +1 -1
  90. package/dist/lang/ug.umd.prod.js +1 -1
  91. package/dist/lang/uk.umd.prod.js +1 -1
  92. package/dist/lang/vi.umd.prod.js +1 -1
  93. package/dist/lang/zh-CN.umd.prod.js +1 -1
  94. package/dist/lang/zh-TW.umd.prod.js +1 -1
  95. package/dist/quasar.cjs.prod.js +2 -2
  96. package/dist/quasar.esm.prod.js +2 -2
  97. package/dist/quasar.sass +1 -1
  98. package/dist/quasar.umd.js +123 -125
  99. package/dist/quasar.umd.prod.js +2 -2
  100. package/dist/ssr-directives/Morph.js +1 -1
  101. package/dist/types/index.d.ts +1824 -1522
  102. package/dist/vetur/quasar-attributes.json +18 -10
  103. package/dist/vetur/quasar-tags.json +2 -0
  104. package/dist/web-types/web-types.json +34 -16
  105. package/package.json +1 -1
  106. package/src/components/color/QColor.json +7 -2
  107. package/src/components/date/QDate.js +1 -1
  108. package/src/components/date/QDate.json +2 -2
  109. package/src/components/file/QFile.js +2 -1
  110. package/src/components/file/QFile.json +1 -1
  111. package/src/components/img/QImg.js +9 -13
  112. package/src/components/img/QImg.json +14 -0
  113. package/src/components/input/QInput.json +2 -2
  114. package/src/components/menu/QMenu.js +4 -1
  115. package/src/components/radio/QRadio.json +1 -1
  116. package/src/components/range/QRange.json +3 -3
  117. package/src/components/select/QSelect.js +23 -60
  118. package/src/components/select/QSelect.json +1 -1
  119. package/src/components/slider/QSlider.json +7 -2
  120. package/src/components/tabs/QTabs.js +41 -12
  121. package/src/components/tabs/QTabs.json +1 -1
  122. package/src/components/time/QTime.json +2 -2
  123. package/src/components/tooltip/QTooltip.js +4 -1
  124. package/src/components/virtual-scroll/use-virtual-scroll.js +4 -28
  125. package/src/composables/private/use-field.js +4 -6
  126. package/src/plugins/Loading.json +3 -2
  127. package/src/plugins/LoadingBar.js +4 -0
  128. package/src/plugins/Meta.js +16 -8
  129. package/src/plugins/Notify.js +3 -0
  130. package/src/utils/private/global-dialog.js +2 -1
  131. package/src/utils/private/rtl.js +27 -0
package/dist/quasar.sass CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.1.4
2
+ * Quasar Framework v2.1.8
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 v2.1.4
2
+ * Quasar Framework v2.1.8
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -1437,7 +1437,7 @@
1437
1437
  }
1438
1438
 
1439
1439
  var installQuasar = function (parentApp, opts = {}) {
1440
- const $q = { version: '2.1.4' };
1440
+ const $q = { version: '2.1.8' };
1441
1441
 
1442
1442
  if (globalConfigIsFrozen === false) {
1443
1443
  if (opts.config !== void 0) {
@@ -5222,7 +5222,10 @@
5222
5222
  'q-menu q-position-engine scroll' + menuClass.value,
5223
5223
  attrs.class
5224
5224
  ],
5225
- style: [ attrs.style, transitionStyle.value ],
5225
+ style: [
5226
+ attrs.style,
5227
+ transitionStyle.value
5228
+ ],
5226
5229
  ...onEvents.value
5227
5230
  }, hSlot(slots.default))
5228
5231
  : null
@@ -8726,6 +8729,30 @@
8726
8729
  }
8727
8730
  });
8728
8731
 
8732
+ let rtlHasScrollBug = false;
8733
+
8734
+ // mobile Chrome takes the crown for this
8735
+ {
8736
+ const scroller = document.createElement('div');
8737
+ const spacer = document.createElement('div');
8738
+
8739
+ scroller.setAttribute('dir', 'rtl');
8740
+ scroller.style.width = '1px';
8741
+ scroller.style.height = '1px';
8742
+ scroller.style.overflow = 'auto';
8743
+
8744
+ spacer.style.width = '1000px';
8745
+ spacer.style.height = '1px';
8746
+
8747
+ document.body.appendChild(scroller);
8748
+ scroller.appendChild(spacer);
8749
+ scroller.scrollLeft = -1000;
8750
+
8751
+ rtlHasScrollBug = scroller.scrollLeft >= 0;
8752
+
8753
+ scroller.remove();
8754
+ }
8755
+
8729
8756
  function getIndicatorClass (color, top, vertical) {
8730
8757
  const pos = vertical === true
8731
8758
  ? [ 'left', 'right' ]
@@ -8852,6 +8879,11 @@
8852
8879
  : { container: 'width', content: 'offsetWidth', scroll: 'scrollWidth' }
8853
8880
  ));
8854
8881
 
8882
+ const isRTL = vue.computed(() => props.vertical !== true && $q.lang.rtl === true);
8883
+ const rtlPosCorrection = vue.computed(() => rtlHasScrollBug === false && isRTL.value === true);
8884
+
8885
+ vue.watch(isRTL, localUpdateArrows);
8886
+
8855
8887
  vue.watch(() => props.modelValue, name => {
8856
8888
  updateModel({ name, setCurrent: true, skipEmit: true });
8857
8889
  });
@@ -8994,12 +9026,18 @@
8994
9026
  if (content !== null) {
8995
9027
  const
8996
9028
  rect = content.getBoundingClientRect(),
8997
- pos = props.vertical === true ? content.scrollTop : content.scrollLeft;
9029
+ pos = props.vertical === true ? content.scrollTop : Math.abs(content.scrollLeft);
8998
9030
 
8999
- leftArrow.value = pos > 0;
9000
- rightArrow.value = props.vertical === true
9001
- ? Math.ceil(pos + rect.height) < content.scrollHeight
9002
- : Math.ceil(pos + rect.width) < content.scrollWidth;
9031
+ if (isRTL.value === true) {
9032
+ leftArrow.value = Math.ceil(pos + rect.width) < content.scrollWidth - 1;
9033
+ rightArrow.value = pos > 0;
9034
+ }
9035
+ else {
9036
+ leftArrow.value = pos > 0;
9037
+ rightArrow.value = props.vertical === true
9038
+ ? Math.ceil(pos + rect.height) < content.scrollHeight
9039
+ : Math.ceil(pos + rect.width) < content.scrollWidth;
9040
+ }
9003
9041
  }
9004
9042
  }
9005
9043
 
@@ -9008,33 +9046,50 @@
9008
9046
  scrollTowards(value);
9009
9047
 
9010
9048
  scrollTimer = setInterval(() => {
9011
- if (scrollTowards(value)) {
9049
+ if (scrollTowards(value) === true) {
9012
9050
  stopAnimScroll();
9013
9051
  }
9014
9052
  }, 5);
9015
9053
  }
9016
9054
 
9017
9055
  function scrollToStart () {
9018
- animScrollTo(0);
9056
+ animScrollTo(rtlPosCorrection.value === true ? 9999 : 0);
9019
9057
  }
9020
9058
 
9021
9059
  function scrollToEnd () {
9022
- animScrollTo(9999);
9060
+ animScrollTo(rtlPosCorrection.value === true ? 0 : 9999);
9023
9061
  }
9024
9062
 
9025
9063
  function stopAnimScroll () {
9026
9064
  clearInterval(scrollTimer);
9027
9065
  }
9028
9066
 
9067
+ // let's speed up execution of time-sensitive scrollTowards()
9068
+ // with a computed variable by directly applying the minimal
9069
+ // number of instructions on get/set functions
9070
+ const posFn = vue.computed(() => (
9071
+ rtlPosCorrection.value === true
9072
+ ? { get: content => Math.abs(content.scrollLeft), set: (content, pos) => { content.scrollLeft = -pos; } }
9073
+ : (
9074
+ props.vertical === true
9075
+ ? { get: content => content.scrollTop, set: (content, pos) => { content.scrollTop = pos; } }
9076
+ : { get: content => content.scrollLeft, set: (content, pos) => { content.scrollLeft = pos; } }
9077
+ )
9078
+ ));
9079
+
9029
9080
  function scrollTowards (value) {
9030
- const content = contentRef.value;
9081
+ const
9082
+ content = contentRef.value,
9083
+ { get, set } = posFn.value;
9084
+
9031
9085
  let
9032
- pos = props.vertical === true ? content.scrollTop : content.scrollLeft,
9033
- done = false;
9086
+ done = false,
9087
+ pos = get(content);
9034
9088
 
9035
9089
  const direction = value < pos ? -1 : 1;
9036
9090
 
9037
9091
  pos += direction * 5;
9092
+
9038
9093
  if (pos < 0) {
9039
9094
  done = true;
9040
9095
  pos = 0;
@@ -9047,7 +9102,7 @@
9047
9102
  pos = value;
9048
9103
  }
9049
9104
 
9050
- content[ props.vertical === true ? 'scrollTop' : 'scrollLeft' ] = pos;
9105
+ set(content, pos);
9051
9106
  localUpdateArrows();
9052
9107
 
9053
9108
  return done
@@ -13251,7 +13306,7 @@
13251
13306
  if (editRange.value === null) {
13252
13307
  const dayProps = days.value.find(day => day.fill !== true && day.i === dayIndex);
13253
13308
 
13254
- if (dayProps.range !== void 0) {
13309
+ if (props.noUnset !== true && dayProps.range !== void 0) {
13255
13310
  removeFromModel({ target: day, from: dayProps.range.from, to: dayProps.range.to });
13256
13311
  return
13257
13312
  }
@@ -15272,7 +15327,10 @@
15272
15327
  'q-tooltip q-tooltip--style q-position-engine no-pointer-events',
15273
15328
  attrs.class
15274
15329
  ],
15275
- style: transitionStyle.value,
15330
+ style: [
15331
+ attrs.style,
15332
+ transitionStyle.value
15333
+ ],
15276
15334
  role: 'complementary'
15277
15335
  }, hSlot(slots.default))
15278
15336
  : null
@@ -18085,12 +18143,10 @@
18085
18143
  return function renderField () {
18086
18144
  return vue.h('label', {
18087
18145
  ref: state.rootRef,
18088
- class: state.inheritAttrs !== true
18089
- ? [
18090
- classes.value,
18091
- attrs.class
18092
- ]
18093
- : classes.value,
18146
+ class: [
18147
+ classes.value,
18148
+ attrs.class
18149
+ ],
18094
18150
  style: attrs.style,
18095
18151
  ...attributes.value
18096
18152
  }, [
@@ -18384,6 +18440,8 @@
18384
18440
  var QFile = vue.defineComponent({
18385
18441
  name: 'QFile',
18386
18442
 
18443
+ inheritAttrs: false,
18444
+
18387
18445
  props: {
18388
18446
  ...useFieldProps,
18389
18447
  ...useFormProps,
@@ -18594,7 +18652,6 @@
18594
18652
  }
18595
18653
 
18596
18654
  Object.assign(state, {
18597
- inheritAttrs: true,
18598
18655
  fieldClass: { value: 'q-file q-field--auto-height' },
18599
18656
  emitValue,
18600
18657
  hasValue,
@@ -19240,9 +19297,6 @@
19240
19297
  })
19241
19298
  }
19242
19299
 
19243
- const crossoriginValues = [ 'anonymous', 'use-credentials' ];
19244
- const loadingValues = [ 'eager', 'lazy' ];
19245
- const fitValues = [ 'cover', 'fill', 'contain', 'none', 'scale-down' ];
19246
19300
  const defaultRatio = 16 / 9;
19247
19301
 
19248
19302
  var QImg = vue.defineComponent({
@@ -19256,16 +19310,15 @@
19256
19310
  sizes: String,
19257
19311
 
19258
19312
  alt: String,
19259
- crossorigin: {
19260
- type: String,
19261
- validator: val => crossoriginValues.includes(val)
19262
- },
19313
+ crossorigin: String,
19314
+ decoding: String,
19315
+ referrerpolicy: String,
19316
+
19263
19317
  draggable: Boolean,
19264
19318
 
19265
19319
  loading: {
19266
19320
  type: String,
19267
- default: 'lazy',
19268
- validator: val => loadingValues.includes(val)
19321
+ default: 'lazy'
19269
19322
  },
19270
19323
  width: String,
19271
19324
  height: String,
@@ -19278,8 +19331,7 @@
19278
19331
 
19279
19332
  fit: {
19280
19333
  type: String,
19281
- default: 'cover',
19282
- validator: val => fitValues.includes(val)
19334
+ default: 'cover'
19283
19335
  },
19284
19336
  position: {
19285
19337
  type: String,
@@ -19299,7 +19351,7 @@
19299
19351
 
19300
19352
  emits: [ 'load', 'error' ],
19301
19353
 
19302
- setup (props, { slots, attrs, emit }) {
19354
+ setup (props, { slots, emit }) {
19303
19355
  const naturalRatio = vue.ref(props.initialRatio);
19304
19356
  const ratioStyle = useRatio(props, naturalRatio);
19305
19357
 
@@ -19422,10 +19474,11 @@
19422
19474
 
19423
19475
  const data = {
19424
19476
  key: 'img_' + index,
19425
- ...attrs,
19426
19477
  class: imgClass.value,
19427
19478
  style: imgStyle.value,
19428
19479
  crossorigin: props.crossorigin,
19480
+ decoding: props.decoding,
19481
+ referrerpolicy: props.referrerpolicy,
19429
19482
  height: props.height,
19430
19483
  width: props.width,
19431
19484
  loading: props.loading,
@@ -24605,31 +24658,6 @@
24605
24658
  ];
24606
24659
 
24607
24660
  const slice = Array.prototype.slice;
24608
-
24609
- let buggyRTL = void 0;
24610
-
24611
- // mobile Chrome takes the crown for this
24612
- {
24613
- const scroller = document.createElement('div');
24614
- const spacer = document.createElement('div');
24615
-
24616
- scroller.setAttribute('dir', 'rtl');
24617
- scroller.style.width = '1px';
24618
- scroller.style.height = '1px';
24619
- scroller.style.overflow = 'auto';
24620
-
24621
- spacer.style.width = '1000px';
24622
- spacer.style.height = '1px';
24623
-
24624
- document.body.appendChild(scroller);
24625
- scroller.appendChild(spacer);
24626
- scroller.scrollLeft = -1000;
24627
-
24628
- buggyRTL = scroller.scrollLeft >= 0;
24629
-
24630
- scroller.remove();
24631
- }
24632
-
24633
24661
  let id$1 = 1;
24634
24662
 
24635
24663
  const setOverflowAnchor = window.getComputedStyle(document.body).overflowAnchor === void 0
@@ -24689,7 +24717,7 @@
24689
24717
  details.scrollMaxSize = parentCalc.scrollWidth;
24690
24718
 
24691
24719
  if (rtl === true) {
24692
- details.scrollStart = (buggyRTL === true ? details.scrollMaxSize - details.scrollViewSize : 0) - details.scrollStart;
24720
+ details.scrollStart = (rtlHasScrollBug === true ? details.scrollMaxSize - details.scrollViewSize : 0) - details.scrollStart;
24693
24721
  }
24694
24722
  }
24695
24723
  else {
@@ -24747,7 +24775,7 @@
24747
24775
  if (parent === window) {
24748
24776
  if (horizontal === true) {
24749
24777
  if (rtl === true) {
24750
- scroll = (buggyRTL === true ? document.body.scrollWidth - window.innerWidth : 0) - scroll;
24778
+ scroll = (rtlHasScrollBug === true ? document.body.scrollWidth - window.innerWidth : 0) - scroll;
24751
24779
  }
24752
24780
  window.scrollTo(scroll, window.pageYOffset || window.scrollY || document.body.scrollTop || 0);
24753
24781
  }
@@ -24757,7 +24785,7 @@
24757
24785
  }
24758
24786
  else if (horizontal === true) {
24759
24787
  if (rtl === true) {
24760
- scroll = (buggyRTL === true ? parent.scrollWidth - parent.offsetWidth : 0) - scroll;
24788
+ scroll = (rtlHasScrollBug === true ? parent.scrollWidth - parent.offsetWidth : 0) - scroll;
24761
24789
  }
24762
24790
  parent.scrollLeft = scroll;
24763
24791
  }
@@ -25436,7 +25464,7 @@
25436
25464
  const dialogFieldFocused = vue.ref(false);
25437
25465
  const innerLoadingIndicator = vue.ref(false);
25438
25466
 
25439
- let inputTimer, innerValueCache, optionScopeCache,
25467
+ let inputTimer, innerValueCache,
25440
25468
  hasDialog, userInputValue, filterId, defaultInputValue,
25441
25469
  transitionShowComputed, searchBuffer, searchBufferExp;
25442
25470
 
@@ -25562,17 +25590,28 @@
25562
25590
  const tabindex = vue.computed(() => (state.focused.value === true ? props.tabindex : -1));
25563
25591
 
25564
25592
  const comboboxAttrs = vue.computed(() => ({
25593
+ tabindex: tabindex.value,
25565
25594
  role: 'combobox',
25566
- 'aria-multiselectable': props.multiple === true ? 'true' : 'false',
25595
+ 'aria-label': props.label,
25596
+ 'aria-autocomplete': props.useInput === true ? 'list' : 'none',
25567
25597
  'aria-expanded': menu.value === true ? 'true' : 'false',
25568
25598
  'aria-owns': `${ state.targetUid.value }_lb`,
25569
- 'aria-activedescendant': `${ state.targetUid.value }_${ optionIndex.value }`
25599
+ 'aria-controls': `${ state.targetUid.value }_lb`
25570
25600
  }));
25571
25601
 
25572
- const listboxAttrs = vue.computed(() => ({
25573
- role: 'listbox',
25574
- id: `${ state.targetUid.value }_lb`
25575
- }));
25602
+ const listboxAttrs = vue.computed(() => {
25603
+ const attrs = {
25604
+ id: `${ state.targetUid.value }_lb`,
25605
+ role: 'listbox',
25606
+ 'aria-multiselectable': props.multiple === true ? 'true' : 'false'
25607
+ };
25608
+
25609
+ if (optionIndex.value >= 0) {
25610
+ attrs[ 'aria-activedescendant' ] = `${ state.targetUid.value }_${ optionIndex.value }`;
25611
+ }
25612
+
25613
+ return attrs
25614
+ });
25576
25615
 
25577
25616
  const selectedScope = vue.computed(() => {
25578
25617
  return innerValue.value.map((opt, i) => ({
@@ -25592,7 +25631,6 @@
25592
25631
  }
25593
25632
 
25594
25633
  const { from, to } = virtualScrollSliceRange.value;
25595
- const { options, optionEls } = optionScopeCache;
25596
25634
 
25597
25635
  return props.options.slice(from, to).map((opt, i) => {
25598
25636
  const disable = isOptionDisabled.value(opt) === true;
@@ -25624,7 +25662,7 @@
25624
25662
  }
25625
25663
  }
25626
25664
 
25627
- const option = {
25665
+ return {
25628
25666
  index,
25629
25667
  opt,
25630
25668
  html: needsHtmlFn.value(opt),
@@ -25634,23 +25672,7 @@
25634
25672
  toggleOption,
25635
25673
  setOptionIndex,
25636
25674
  itemProps
25637
- };
25638
-
25639
- const optionWithoutEvents = {
25640
- ...option,
25641
- itemProps: {
25642
- ...itemProps,
25643
- onClick: void 0,
25644
- onMousemove: void 0
25645
- }
25646
- };
25647
-
25648
- if (options[ i ] === void 0 || isDeepEqual(optionWithoutEvents, options[ i ]) !== true) {
25649
- options[ i ] = optionWithoutEvents;
25650
- optionEls[ i ] = void 0;
25651
25675
  }
25652
-
25653
- return option
25654
25676
  })
25655
25677
  });
25656
25678
 
@@ -26232,14 +26254,6 @@
26232
26254
  }
26233
26255
 
26234
26256
  function getAllOptions () {
26235
- if (
26236
- slots.option !== void 0
26237
- && optionScopeCache.optionSlot !== slots.option
26238
- ) {
26239
- optionScopeCache.optionSlot = slots.option;
26240
- optionScopeCache.optionEls = [];
26241
- }
26242
-
26243
26257
  const fn = slots.option !== void 0
26244
26258
  ? slots.option
26245
26259
  : scope => {
@@ -26259,15 +26273,7 @@
26259
26273
  })
26260
26274
  };
26261
26275
 
26262
- const { optionEls } = optionScopeCache;
26263
-
26264
- let options = padVirtualScroll('div', optionScope.value.map((scope, i) => {
26265
- if (optionEls[ i ] === void 0) {
26266
- optionEls[ i ] = fn(scope);
26267
- }
26268
-
26269
- return optionEls[ i ]
26270
- }));
26276
+ let options = padVirtualScroll('div', optionScope.value.map(fn));
26271
26277
 
26272
26278
  if (slots[ 'before-options' ] !== void 0) {
26273
26279
  options = slots[ 'before-options' ]().concat(options);
@@ -26285,16 +26291,15 @@
26285
26291
  value: inputValue.value !== void 0 ? inputValue.value : '',
26286
26292
  // required for Android in order to show ENTER key when in form
26287
26293
  type: 'search',
26294
+ ...comboboxAttrs.value,
26288
26295
  ...state.splitAttrs.attributes.value,
26289
26296
  id: state.targetUid.value,
26290
26297
  maxlength: props.maxlength,
26291
- tabindex: props.tabindex,
26292
26298
  autocomplete: props.autocomplete,
26293
26299
  'data-autofocus': (fromDialog !== true && props.autofocus === true) || void 0,
26294
26300
  disabled: props.disable === true,
26295
26301
  readonly: props.readonly === true,
26296
- ...inputControlEvents.value,
26297
- ...comboboxAttrs.value
26302
+ ...inputControlEvents.value
26298
26303
  };
26299
26304
 
26300
26305
  if (fromDialog !== true && hasDialog === true) {
@@ -26580,10 +26585,6 @@
26580
26585
  }
26581
26586
 
26582
26587
  function closeMenu () {
26583
- if (optionScopeCache !== void 0) {
26584
- optionScopeCache.optionEls = [];
26585
- }
26586
-
26587
26588
  if (dialog.value === true) {
26588
26589
  return
26589
26590
  }
@@ -26699,16 +26700,7 @@
26699
26700
 
26700
26701
  updatePreState();
26701
26702
 
26702
- vue.onBeforeMount(() => {
26703
- optionScopeCache = {
26704
- optionSlot: slots.option,
26705
- options: [],
26706
- optionEls: []
26707
- };
26708
- });
26709
-
26710
26703
  vue.onBeforeUnmount(() => {
26711
- optionScopeCache = void 0;
26712
26704
  clearTimeout(inputTimer);
26713
26705
  });
26714
26706
 
@@ -26796,7 +26788,6 @@
26796
26788
  key: 'd_t',
26797
26789
  class: 'no-outline',
26798
26790
  id: state.targetUid.value,
26799
- tabindex: props.tabindex,
26800
26791
  ...comboboxAttrs.value,
26801
26792
  onKeydown: onTargetKeydown,
26802
26793
  onKeyup: onTargetKeyup,
@@ -37240,6 +37231,10 @@
37240
37231
 
37241
37232
  const vm = createChildApp({
37242
37233
  name: 'LoadingBar',
37234
+
37235
+ // hide App from Vue devtools
37236
+ devtools: { hide: true },
37237
+
37243
37238
  setup: () => () => vue.h(QAjaxBar, props.value)
37244
37239
  }, parentApp).mount(el);
37245
37240
 
@@ -37635,6 +37630,9 @@
37635
37630
  function getComponent ($q) {
37636
37631
  return vue.defineComponent({
37637
37632
  name: 'QNotifications',
37633
+
37634
+ // hide App from Vue devtools
37635
+ devtools: { hide: true },
37638
37636
 
37639
37637
  setup () {
37640
37638
  const notificationsList = {};
@@ -38589,7 +38587,7 @@
38589
38587
  });
38590
38588
 
38591
38589
  var index_umd = {
38592
- version: '2.1.4',
38590
+ version: '2.1.8',
38593
38591
  install (app, opts) {
38594
38592
  installQuasar(app, {
38595
38593
  components,