quasar 2.6.6 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/dist/api/QBtnDropdown.json +1 -0
  2. package/dist/api/QBtnToggle.json +1 -0
  3. package/dist/api/QCarousel.json +2 -1
  4. package/dist/api/QCheckbox.json +1 -0
  5. package/dist/api/QChip.json +3 -1
  6. package/dist/api/QColor.json +1 -0
  7. package/dist/api/QDate.json +1 -0
  8. package/dist/api/QEditor.json +3 -1
  9. package/dist/api/QExpansionItem.json +1 -0
  10. package/dist/api/QFab.json +1 -0
  11. package/dist/api/QFile.json +1 -0
  12. package/dist/api/QFooter.json +1 -0
  13. package/dist/api/QHeader.json +1 -0
  14. package/dist/api/QInput.json +1 -0
  15. package/dist/api/QItem.json +3 -1
  16. package/dist/api/QKnob.json +1 -0
  17. package/dist/api/QOptionGroup.json +1 -0
  18. package/dist/api/QPagination.json +1 -0
  19. package/dist/api/QPopupEdit.json +1 -0
  20. package/dist/api/QPopupProxy.json +1 -0
  21. package/dist/api/QRadio.json +1 -0
  22. package/dist/api/QRange.json +1 -0
  23. package/dist/api/QRating.json +1 -0
  24. package/dist/api/QSelect.json +1 -0
  25. package/dist/api/QSlider.json +1 -0
  26. package/dist/api/QSplitter.json +1 -0
  27. package/dist/api/QTable.json +5 -1
  28. package/dist/api/QTabs.json +1 -0
  29. package/dist/api/QTime.json +1 -0
  30. package/dist/api/QToggle.json +1 -0
  31. package/dist/api/QTree.json +6 -3
  32. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  33. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  34. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  35. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  36. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  37. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  38. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  39. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  40. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  41. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  42. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  43. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  44. package/dist/icon-set/material-symbols-outlined.umd.prod.js +6 -0
  45. package/dist/icon-set/material-symbols-rounded.umd.prod.js +6 -0
  46. package/dist/icon-set/material-symbols-sharp.umd.prod.js +6 -0
  47. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  48. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  49. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  50. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  51. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  52. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  53. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  54. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  55. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  56. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  57. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  58. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  59. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  60. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  61. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  62. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  63. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +6 -0
  64. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +6 -0
  65. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +6 -0
  66. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  67. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  68. package/dist/icon-set/themify.umd.prod.js +1 -1
  69. package/dist/lang/ar-TN.umd.prod.js +1 -1
  70. package/dist/lang/ar.umd.prod.js +1 -1
  71. package/dist/lang/az-Latn.umd.prod.js +1 -1
  72. package/dist/lang/bg.umd.prod.js +1 -1
  73. package/dist/lang/bn.umd.prod.js +1 -1
  74. package/dist/lang/ca.umd.prod.js +1 -1
  75. package/dist/lang/cs.umd.prod.js +1 -1
  76. package/dist/lang/da.umd.prod.js +1 -1
  77. package/dist/lang/de.umd.prod.js +1 -1
  78. package/dist/lang/el.umd.prod.js +1 -1
  79. package/dist/lang/en-GB.umd.prod.js +1 -1
  80. package/dist/lang/en-US.umd.prod.js +1 -1
  81. package/dist/lang/eo.umd.prod.js +1 -1
  82. package/dist/lang/es.umd.prod.js +2 -2
  83. package/dist/lang/et.umd.prod.js +1 -1
  84. package/dist/lang/eu.umd.prod.js +1 -1
  85. package/dist/lang/fa-IR.umd.prod.js +1 -1
  86. package/dist/lang/fa.umd.prod.js +1 -1
  87. package/dist/lang/fi.umd.prod.js +1 -1
  88. package/dist/lang/fr.umd.prod.js +1 -1
  89. package/dist/lang/gn.umd.prod.js +1 -1
  90. package/dist/lang/he.umd.prod.js +1 -1
  91. package/dist/lang/hr.umd.prod.js +1 -1
  92. package/dist/lang/hu.umd.prod.js +1 -1
  93. package/dist/lang/id.umd.prod.js +1 -1
  94. package/dist/lang/is.umd.prod.js +1 -1
  95. package/dist/lang/it.umd.prod.js +1 -1
  96. package/dist/lang/ja.umd.prod.js +1 -1
  97. package/dist/lang/km.umd.prod.js +1 -1
  98. package/dist/lang/ko-KR.umd.prod.js +1 -1
  99. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  100. package/dist/lang/kz.umd.prod.js +1 -1
  101. package/dist/lang/lt.umd.prod.js +1 -1
  102. package/dist/lang/lu.umd.prod.js +1 -1
  103. package/dist/lang/lv.umd.prod.js +1 -1
  104. package/dist/lang/ml.umd.prod.js +1 -1
  105. package/dist/lang/mm.umd.prod.js +6 -0
  106. package/dist/lang/ms.umd.prod.js +1 -1
  107. package/dist/lang/my.umd.prod.js +1 -1
  108. package/dist/lang/nb-NO.umd.prod.js +1 -1
  109. package/dist/lang/nl.umd.prod.js +1 -1
  110. package/dist/lang/pl.umd.prod.js +1 -1
  111. package/dist/lang/pt-BR.umd.prod.js +1 -1
  112. package/dist/lang/pt.umd.prod.js +1 -1
  113. package/dist/lang/ro.umd.prod.js +1 -1
  114. package/dist/lang/ru.umd.prod.js +1 -1
  115. package/dist/lang/sk.umd.prod.js +1 -1
  116. package/dist/lang/sl.umd.prod.js +1 -1
  117. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  118. package/dist/lang/sr.umd.prod.js +1 -1
  119. package/dist/lang/sv.umd.prod.js +1 -1
  120. package/dist/lang/ta.umd.prod.js +1 -1
  121. package/dist/lang/th.umd.prod.js +1 -1
  122. package/dist/lang/tr.umd.prod.js +1 -1
  123. package/dist/lang/ug.umd.prod.js +1 -1
  124. package/dist/lang/uk.umd.prod.js +1 -1
  125. package/dist/lang/vi.umd.prod.js +1 -1
  126. package/dist/lang/zh-CN.umd.prod.js +1 -1
  127. package/dist/lang/zh-TW.umd.prod.js +1 -1
  128. package/dist/quasar.addon.rtl.css +251 -0
  129. package/dist/quasar.cjs.prod.js +2 -2
  130. package/dist/quasar.css +4 -1
  131. package/dist/quasar.esm.prod.js +2 -2
  132. package/dist/quasar.prod.css +1 -1
  133. package/dist/quasar.rtl.css +1225 -1
  134. package/dist/quasar.rtl.prod.css +1 -1
  135. package/dist/quasar.sass +5 -2
  136. package/dist/quasar.umd.js +88 -65
  137. package/dist/quasar.umd.prod.js +2 -2
  138. package/dist/types/api/quploader.d.ts +7 -7
  139. package/dist/types/extras/icon-set.d.ts +6 -0
  140. package/dist/types/index.d.ts +259 -254
  141. package/dist/types/utils/dom.d.ts +1 -1
  142. package/dist/types/utils.d.ts +11 -0
  143. package/dist/web-types/web-types.json +1 -1
  144. package/icon-set/material-symbols-outlined.js +133 -0
  145. package/icon-set/material-symbols-outlined.mjs +128 -0
  146. package/icon-set/material-symbols-rounded.js +133 -0
  147. package/icon-set/material-symbols-rounded.mjs +128 -0
  148. package/icon-set/material-symbols-sharp.js +133 -0
  149. package/icon-set/material-symbols-sharp.mjs +128 -0
  150. package/icon-set/svg-material-symbols-outlined.js +201 -0
  151. package/icon-set/svg-material-symbols-outlined.mjs +201 -0
  152. package/icon-set/svg-material-symbols-rounded.js +201 -0
  153. package/icon-set/svg-material-symbols-rounded.mjs +201 -0
  154. package/icon-set/svg-material-symbols-sharp.js +201 -0
  155. package/icon-set/svg-material-symbols-sharp.mjs +201 -0
  156. package/lang/es.js +1 -1
  157. package/lang/es.mjs +1 -1
  158. package/lang/index.json +4 -0
  159. package/lang/mm.js +96 -0
  160. package/lang/mm.mjs +91 -0
  161. package/package.json +4 -5
  162. package/src/api.extends.json +1 -0
  163. package/src/components/avatar/__tests__/QAvatar.spec.js +1 -1
  164. package/src/components/badge/__tests__/QBadge.spec.js +1 -1
  165. package/src/components/btn/QBtn.js +2 -2
  166. package/src/components/editor/QEditor.js +11 -25
  167. package/src/components/icon/QIcon.js +24 -1
  168. package/src/components/icon/QIcon.sass +4 -1
  169. package/src/components/infinite-scroll/QInfiniteScroll.js +10 -10
  170. package/src/components/input/QInput.js +5 -0
  171. package/src/components/item/QItem.js +5 -2
  172. package/src/components/item/QItem.json +2 -1
  173. package/src/components/layout/QLayout.js +2 -1
  174. package/src/components/select/QSelect.js +1 -1
  175. package/src/components/slider/use-slider.js +1 -1
  176. package/src/components/table/QTable.json +3 -0
  177. package/src/components/uploader/uploader-core.js +22 -18
  178. package/src/components/virtual-scroll/use-virtual-scroll.js +3 -3
  179. package/src/composables/private/__tests__/use-model-toggle.spec.js +2 -2
  180. package/src/composables/private/__tests__/use-size.spec.js +2 -2
  181. package/src/composables/private/__tests__/use-validate.spec.js +1 -1
  182. package/src/composables/private/use-field.js +1 -0
package/dist/quasar.sass CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.6.6
2
+ * Quasar Framework v2.7.0
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -669,7 +669,10 @@ input[type='search']::-webkit-search-decoration
669
669
  .material-icons,
670
670
  .material-icons-outlined,
671
671
  .material-icons-round,
672
- .material-icons-sharp
672
+ .material-icons-sharp,
673
+ .material-symbols-outlined,
674
+ .material-symbols-rounded,
675
+ .material-symbols-sharp
673
676
  user-select: none
674
677
  cursor: inherit
675
678
  font-size: inherit
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.6.6
2
+ * Quasar Framework v2.7.0
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -1603,7 +1603,7 @@
1603
1603
  }
1604
1604
 
1605
1605
  var installQuasar = function (parentApp, opts = {}) {
1606
- const $q = { version: '2.6.6' };
1606
+ const $q = { version: '2.7.0' };
1607
1607
 
1608
1608
  if (globalConfigIsFrozen === false) {
1609
1609
  if (opts.config !== void 0) {
@@ -2059,8 +2059,15 @@
2059
2059
  s_: '-sharp'
2060
2060
  };
2061
2061
 
2062
+ const symMap = {
2063
+ sym_o_: '-outlined',
2064
+ sym_r_: '-rounded',
2065
+ sym_s_: '-sharp'
2066
+ };
2067
+
2062
2068
  const libRE = new RegExp('^(' + Object.keys(libMap).join('|') + ')');
2063
2069
  const matRE = new RegExp('^(' + Object.keys(matMap).join('|') + ')');
2070
+ const symRE = new RegExp('^(' + Object.keys(symMap).join('|') + ')');
2064
2071
  const mRE = /^[Mm]\s?[-+]?\.?\d/;
2065
2072
  const imgRE = /^img:/;
2066
2073
  const svgUseRE = /^svguse:/;
@@ -2165,6 +2172,22 @@
2165
2172
  else if (ionRE.test(icon) === true) {
2166
2173
  cls = `ionicons ion-${ $q.platform.is.ios === true ? 'ios' : 'md' }${ icon.substring(3) }`;
2167
2174
  }
2175
+ else if (symRE.test(icon) === true) {
2176
+ // "notranslate" class is for Google Translate
2177
+ // to avoid tampering with Material Symbols ligature font
2178
+ //
2179
+ // Caution: To be able to add suffix to the class name,
2180
+ // keep the 'material-symbols' at the end of the string.
2181
+ cls = 'notranslate material-symbols';
2182
+
2183
+ const matches = icon.match(symRE);
2184
+ if (matches !== null) {
2185
+ icon = icon.substring(6);
2186
+ cls += symMap[ matches[ 1 ] ];
2187
+ }
2188
+
2189
+ content = icon;
2190
+ }
2168
2191
  else {
2169
2192
  // "notranslate" class is for Google Translate
2170
2193
  // to avoid tampering with Material Icons ligature font
@@ -2209,7 +2232,7 @@
2209
2232
  if (type.value.svg === true) {
2210
2233
  return vue.h('span', data, hMergeSlot(slots.default, [
2211
2234
  vue.h('svg', {
2212
- viewBox: type.value.viewBox
2235
+ viewBox: type.value.viewBox || '0 0 24 24'
2213
2236
  }, type.value.nodes)
2214
2237
  ]))
2215
2238
  }
@@ -3740,10 +3763,10 @@
3740
3763
  if (props.loading === true && props.percentage !== void 0) {
3741
3764
  child.push(
3742
3765
  vue.h('span', {
3743
- class: 'q-btn__progress absolute-full overflow-hidden'
3766
+ class: 'q-btn__progress absolute-full overflow-hidden' + (props.darkPercentage === true ? ' q-btn__progress--dark' : '')
3744
3767
  }, [
3745
3768
  vue.h('span', {
3746
- class: 'q-btn__progress-indicator fit block' + (props.darkPercentage === true ? ' q-btn__progress--dark' : ''),
3769
+ class: 'q-btn__progress-indicator fit block',
3747
3770
  style: percentageStyle.value
3748
3771
  })
3749
3772
  ])
@@ -8381,7 +8404,7 @@
8381
8404
  && innerMin.value < innerMax.value
8382
8405
  ));
8383
8406
 
8384
- const decimals = vue.computed(() => (String(props.step).trim('0').split('.')[ 1 ] || '').length);
8407
+ const decimals = vue.computed(() => (String(props.step).trim().split('.')[ 1 ] || '').length);
8385
8408
  const step = vue.computed(() => (props.step === 0 ? 1 : props.step));
8386
8409
  const tabindex = vue.computed(() => (editable.value === true ? props.tabindex || 0 : -1));
8387
8410
 
@@ -16088,7 +16111,10 @@
16088
16111
  default: 'div'
16089
16112
  },
16090
16113
 
16091
- active: Boolean,
16114
+ active: {
16115
+ type: Boolean,
16116
+ default: null
16117
+ },
16092
16118
 
16093
16119
  clickable: Boolean,
16094
16120
  dense: Boolean,
@@ -16126,7 +16152,7 @@
16126
16152
  + (props.dense === true ? ' q-item--dense' : '')
16127
16153
  + (isDark.value === true ? ' q-item--dark' : '')
16128
16154
  + (
16129
- hasLink.value === true
16155
+ hasLink.value === true && props.active === null
16130
16156
  ? linkClass.value
16131
16157
  : (
16132
16158
  props.active === true
@@ -17029,27 +17055,12 @@
17029
17055
  }
17030
17056
  }
17031
17057
 
17032
- function onMousedown () {
17058
+ function onPointerStart () {
17033
17059
  offsetBottom = void 0;
17034
17060
  }
17035
17061
 
17036
- function onMouseup (e) {
17062
+ function onSelectionchange (e) {
17037
17063
  eVm.caret.save();
17038
- emit('mouseup', e);
17039
- }
17040
-
17041
- function onTouchstartPassive () {
17042
- offsetBottom = void 0;
17043
- }
17044
-
17045
- function onKeyup (e) {
17046
- eVm.caret.save();
17047
- emit('keyup', e);
17048
- }
17049
-
17050
- function onTouchend (e) {
17051
- eVm.caret.save();
17052
- emit('touchend', e);
17053
17064
  }
17054
17065
 
17055
17066
  function setContent (v, restorePosition) {
@@ -17106,6 +17117,12 @@
17106
17117
  eVm.caret = proxy.caret = new Caret(contentRef.value, eVm);
17107
17118
  setContent(props.modelValue);
17108
17119
  refreshToolbar();
17120
+
17121
+ document.addEventListener('selectionchange', onSelectionchange);
17122
+ });
17123
+
17124
+ vue.onBeforeUnmount(() => {
17125
+ document.removeEventListener('selectionchange', onSelectionchange);
17109
17126
  });
17110
17127
 
17111
17128
  return () => {
@@ -17159,13 +17176,8 @@
17159
17176
  onFocus,
17160
17177
 
17161
17178
  // clean saved scroll position
17162
- onMousedown,
17163
- onTouchstartPassive,
17164
-
17165
- // save caret
17166
- onMouseup,
17167
- onKeyup,
17168
- onTouchend
17179
+ onMousedown: onPointerStart,
17180
+ onTouchstartPassive: onPointerStart
17169
17181
  })
17170
17182
  ])
17171
17183
  }
@@ -19009,28 +19021,32 @@
19009
19021
 
19010
19022
  return [
19011
19023
  vue.h('div', {
19012
- class: 'q-uploader__header-content flex flex-center no-wrap q-gutter-xs'
19024
+ class: 'q-uploader__header-content column'
19013
19025
  }, [
19014
- getBtn(state.queuedFiles.value.length > 0, 'removeQueue', removeQueuedFiles),
19015
- getBtn(state.uploadedFiles.value.length > 0, 'removeUploaded', removeUploadedFiles),
19016
-
19017
- state.isUploading.value === true
19018
- ? vue.h(QSpinner, { class: 'q-uploader__spinner' })
19019
- : null,
19026
+ vue.h('div', {
19027
+ class: 'flex flex-center no-wrap q-gutter-xs'
19028
+ }, [
19029
+ getBtn(state.queuedFiles.value.length > 0, 'removeQueue', removeQueuedFiles),
19030
+ getBtn(state.uploadedFiles.value.length > 0, 'removeUploaded', removeUploadedFiles),
19020
19031
 
19021
- vue.h('div', { class: 'col column justify-center' }, [
19022
- props.label !== void 0
19023
- ? vue.h('div', { class: 'q-uploader__title' }, [ props.label ])
19032
+ state.isUploading.value === true
19033
+ ? vue.h(QSpinner, { class: 'q-uploader__spinner' })
19024
19034
  : null,
19025
19035
 
19026
- vue.h('div', { class: 'q-uploader__subtitle' }, [
19027
- uploadSizeLabel.value + ' / ' + uploadProgressLabel.value
19028
- ])
19029
- ]),
19036
+ vue.h('div', { class: 'col column justify-center' }, [
19037
+ props.label !== void 0
19038
+ ? vue.h('div', { class: 'q-uploader__title' }, [ props.label ])
19039
+ : null,
19040
+
19041
+ vue.h('div', { class: 'q-uploader__subtitle' }, [
19042
+ uploadSizeLabel.value + ' / ' + uploadProgressLabel.value
19043
+ ])
19044
+ ]),
19030
19045
 
19031
- getBtn(canAddFiles.value, 'add'),
19032
- getBtn(props.hideUploadBtn === false && canUpload.value === true, 'upload', state.upload),
19033
- getBtn(state.isUploading.value, 'clear', state.abort)
19046
+ getBtn(canAddFiles.value, 'add'),
19047
+ getBtn(props.hideUploadBtn === false && canUpload.value === true, 'upload', state.upload),
19048
+ getBtn(state.isUploading.value, 'clear', state.abort)
19049
+ ])
19034
19050
  ])
19035
19051
  ]
19036
19052
  }
@@ -21005,6 +21021,7 @@
21005
21021
  vue.h('div', {
21006
21022
  ref: state.targetRef,
21007
21023
  class: 'q-field__native row',
21024
+ tabindex: -1,
21008
21025
  ...state.splitAttrs.attributes.value,
21009
21026
  'data-autofocus': props.autofocus === true || void 0
21010
21027
  }, slots.control(controlSlotScope.value))
@@ -22502,6 +22519,16 @@
22502
22519
 
22503
22520
  if (isWorking.value === true) {
22504
22521
  localScrollTarget.addEventListener('scroll', poll, passive$3);
22522
+
22523
+ if (props.reverse === true) {
22524
+ const
22525
+ scrollHeight = getScrollHeight(localScrollTarget),
22526
+ containerHeight = height(localScrollTarget);
22527
+
22528
+ setVerticalScrollPosition(localScrollTarget, scrollHeight - containerHeight);
22529
+ }
22530
+
22531
+ immediatePoll();
22505
22532
  }
22506
22533
  }
22507
22534
 
@@ -22572,16 +22599,6 @@
22572
22599
  setDebounce(props.debounce);
22573
22600
 
22574
22601
  updateScrollTarget();
22575
-
22576
- if (props.reverse === true) {
22577
- const
22578
- scrollHeight = getScrollHeight(localScrollTarget),
22579
- containerHeight = height(localScrollTarget);
22580
-
22581
- setVerticalScrollPosition(localScrollTarget, scrollHeight - containerHeight);
22582
- }
22583
-
22584
- immediatePoll();
22585
22602
  });
22586
22603
 
22587
22604
  return () => {
@@ -23486,6 +23503,8 @@
23486
23503
  }
23487
23504
 
23488
23505
  if (props.modelValue !== val && emitCachedValue !== val) {
23506
+ emitCachedValue = val;
23507
+
23489
23508
  stopWatcher === true && (stopValueWatcher = true);
23490
23509
  emit('update:modelValue', val);
23491
23510
 
@@ -23517,13 +23536,16 @@
23517
23536
  const inp = inputRef.value;
23518
23537
  if (inp !== null) {
23519
23538
  const parentStyle = inp.parentNode.style;
23539
+ const { overflow } = inp.style;
23520
23540
 
23521
23541
  // reset height of textarea to a small size to detect the real height
23522
23542
  // but keep the total control size the same
23523
23543
  parentStyle.marginBottom = (inp.scrollHeight - 1) + 'px';
23524
23544
  inp.style.height = '1px';
23545
+ inp.style.overflow = 'hidden';
23525
23546
 
23526
23547
  inp.style.height = inp.scrollHeight + 'px';
23548
+ inp.style.overflow = overflow;
23527
23549
  parentStyle.marginBottom = '';
23528
23550
  }
23529
23551
  }
@@ -24485,7 +24507,8 @@
24485
24507
  const layout = vue.h('div', {
24486
24508
  class: classes.value,
24487
24509
  style: style.value,
24488
- ref: props.container === true ? void 0 : rootRef
24510
+ ref: props.container === true ? void 0 : rootRef,
24511
+ tabindex: -1
24489
24512
  }, content);
24490
24513
 
24491
24514
  if (props.container === true) {
@@ -27491,7 +27514,7 @@
27491
27514
  ? noop
27492
27515
  : function (contentEl, index) {
27493
27516
  requestAnimationFrame(() => {
27494
- if (contentEl === void 0) {
27517
+ if (contentEl === null) {
27495
27518
  return
27496
27519
  }
27497
27520
 
@@ -27885,7 +27908,7 @@
27885
27908
  contentEl.addEventListener('focusout', onBlurRefocusFn);
27886
27909
 
27887
27910
  setTimeout(() => {
27888
- contentEl !== void 0 && contentEl.removeEventListener('focusout', onBlurRefocusFn);
27911
+ contentEl !== null && contentEl.removeEventListener('focusout', onBlurRefocusFn);
27889
27912
  });
27890
27913
  }
27891
27914
 
@@ -27998,7 +28021,7 @@
27998
28021
  }
27999
28022
 
28000
28023
  function onBlurRefocusFn () {
28001
- contentRef.value !== void 0 && contentRef.value.focus();
28024
+ contentRef.value !== null && contentRef.value !== void 0 && contentRef.value.focus();
28002
28025
  }
28003
28026
 
28004
28027
  function localResetVirtualScroll (toIndex, fullReset) {
@@ -28352,7 +28375,7 @@
28352
28375
 
28353
28376
  const virtualScrollItemSizeComputed = vue.computed(() => (
28354
28377
  props.virtualScrollItemSize === void 0
28355
- ? (props.dense === true ? 24 : 48)
28378
+ ? (props.optionsDense === true ? 24 : 48)
28356
28379
  : props.virtualScrollItemSize
28357
28380
  ));
28358
28381
 
@@ -39675,7 +39698,7 @@
39675
39698
  });
39676
39699
 
39677
39700
  var index_umd = {
39678
- version: '2.6.6',
39701
+ version: '2.7.0',
39679
39702
  install (app, opts) {
39680
39703
  installQuasar(app, {
39681
39704
  components,