quasar 2.12.7 → 2.13.1

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 (210) hide show
  1. package/dist/api/BottomSheet.json +7 -2
  2. package/dist/api/Dialog.json +7 -2
  3. package/dist/api/QBanner.json +7 -2
  4. package/dist/api/QBar.json +7 -2
  5. package/dist/api/QBtn.json +7 -2
  6. package/dist/api/QBtnDropdown.json +7 -2
  7. package/dist/api/QCard.json +7 -2
  8. package/dist/api/QCarousel.json +7 -2
  9. package/dist/api/QCheckbox.json +8 -3
  10. package/dist/api/QChip.json +13 -3
  11. package/dist/api/QColor.json +7 -2
  12. package/dist/api/QDate.json +7 -2
  13. package/dist/api/QDrawer.json +7 -2
  14. package/dist/api/QEditor.json +7 -2
  15. package/dist/api/QExpansionItem.json +7 -2
  16. package/dist/api/QFab.json +7 -2
  17. package/dist/api/QFabAction.json +7 -2
  18. package/dist/api/QField.json +28 -7
  19. package/dist/api/QFile.json +14 -4
  20. package/dist/api/QImg.json +1 -1
  21. package/dist/api/QInnerLoading.json +7 -2
  22. package/dist/api/QInput.json +16 -5
  23. package/dist/api/QIntersection.json +7 -2
  24. package/dist/api/QItem.json +12 -4
  25. package/dist/api/QLinearProgress.json +7 -2
  26. package/dist/api/QList.json +7 -2
  27. package/dist/api/QMarkupTable.json +7 -2
  28. package/dist/api/QMenu.json +21 -6
  29. package/dist/api/QOptionGroup.json +7 -2
  30. package/dist/api/QPagination.json +37 -11
  31. package/dist/api/QRadio.json +7 -2
  32. package/dist/api/QRange.json +7 -2
  33. package/dist/api/QScrollArea.json +14 -4
  34. package/dist/api/QSelect.json +24 -8
  35. package/dist/api/QSeparator.json +7 -2
  36. package/dist/api/QSkeleton.json +7 -2
  37. package/dist/api/QSlideItem.json +7 -2
  38. package/dist/api/QSlider.json +7 -2
  39. package/dist/api/QStepper.json +7 -2
  40. package/dist/api/QTabPanel.json +7 -2
  41. package/dist/api/QTable.json +124 -21
  42. package/dist/api/QTime.json +17 -6
  43. package/dist/api/QTimeline.json +7 -2
  44. package/dist/api/QToggle.json +8 -3
  45. package/dist/api/QTooltip.json +14 -4
  46. package/dist/api/QTree.json +7 -2
  47. package/dist/api/QUploader.json +7 -2
  48. package/dist/api/QVirtualScroll.json +2 -1
  49. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  50. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  51. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  52. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  53. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  54. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  55. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  56. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  57. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  58. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  59. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  60. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  61. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  62. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  63. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  64. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  65. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  66. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  67. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  68. package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
  69. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  70. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  71. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  72. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  73. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  74. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  75. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  76. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  77. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +2 -2
  78. package/dist/icon-set/svg-material-icons-round.umd.prod.js +2 -2
  79. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +2 -2
  80. package/dist/icon-set/svg-material-icons.umd.prod.js +2 -2
  81. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +2 -2
  82. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +2 -2
  83. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +2 -2
  84. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  85. package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
  86. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  87. package/dist/icon-set/themify.umd.prod.js +1 -1
  88. package/dist/lang/ar-TN.umd.prod.js +1 -1
  89. package/dist/lang/ar.umd.prod.js +1 -1
  90. package/dist/lang/az-Latn.umd.prod.js +1 -1
  91. package/dist/lang/bg.umd.prod.js +1 -1
  92. package/dist/lang/bn.umd.prod.js +1 -1
  93. package/dist/lang/ca.umd.prod.js +1 -1
  94. package/dist/lang/cs.umd.prod.js +1 -1
  95. package/dist/lang/da.umd.prod.js +1 -1
  96. package/dist/lang/de-CH.umd.prod.js +6 -0
  97. package/dist/lang/de-DE.umd.prod.js +6 -0
  98. package/dist/lang/de.umd.prod.js +1 -1
  99. package/dist/lang/el.umd.prod.js +1 -1
  100. package/dist/lang/en-GB.umd.prod.js +1 -1
  101. package/dist/lang/en-US.umd.prod.js +1 -1
  102. package/dist/lang/eo.umd.prod.js +1 -1
  103. package/dist/lang/es.umd.prod.js +1 -1
  104. package/dist/lang/et.umd.prod.js +1 -1
  105. package/dist/lang/eu.umd.prod.js +1 -1
  106. package/dist/lang/fa-IR.umd.prod.js +1 -1
  107. package/dist/lang/fa.umd.prod.js +1 -1
  108. package/dist/lang/fi.umd.prod.js +1 -1
  109. package/dist/lang/fr.umd.prod.js +1 -1
  110. package/dist/lang/gn.umd.prod.js +1 -1
  111. package/dist/lang/he.umd.prod.js +1 -1
  112. package/dist/lang/hi.umd.prod.js +1 -1
  113. package/dist/lang/hr.umd.prod.js +1 -1
  114. package/dist/lang/hu.umd.prod.js +1 -1
  115. package/dist/lang/id.umd.prod.js +1 -1
  116. package/dist/lang/is.umd.prod.js +1 -1
  117. package/dist/lang/it.umd.prod.js +1 -1
  118. package/dist/lang/ja.umd.prod.js +1 -1
  119. package/dist/lang/kk.umd.prod.js +1 -1
  120. package/dist/lang/km.umd.prod.js +1 -1
  121. package/dist/lang/ko-KR.umd.prod.js +1 -1
  122. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  123. package/dist/lang/lt.umd.prod.js +1 -1
  124. package/dist/lang/lu.umd.prod.js +1 -1
  125. package/dist/lang/lv.umd.prod.js +1 -1
  126. package/dist/lang/mk.umd.prod.js +2 -2
  127. package/dist/lang/ml.umd.prod.js +1 -1
  128. package/dist/lang/mm.umd.prod.js +1 -1
  129. package/dist/lang/ms.umd.prod.js +1 -1
  130. package/dist/lang/my.umd.prod.js +1 -1
  131. package/dist/lang/nb-NO.umd.prod.js +1 -1
  132. package/dist/lang/nl.umd.prod.js +1 -1
  133. package/dist/lang/pl.umd.prod.js +1 -1
  134. package/dist/lang/pt-BR.umd.prod.js +1 -1
  135. package/dist/lang/pt.umd.prod.js +1 -1
  136. package/dist/lang/ro.umd.prod.js +1 -1
  137. package/dist/lang/ru.umd.prod.js +1 -1
  138. package/dist/lang/sk.umd.prod.js +1 -1
  139. package/dist/lang/sl.umd.prod.js +1 -1
  140. package/dist/lang/sm.umd.prod.js +1 -1
  141. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  142. package/dist/lang/sr.umd.prod.js +1 -1
  143. package/dist/lang/sv.umd.prod.js +1 -1
  144. package/dist/lang/ta.umd.prod.js +1 -1
  145. package/dist/lang/th.umd.prod.js +1 -1
  146. package/dist/lang/tr.umd.prod.js +1 -1
  147. package/dist/lang/ug.umd.prod.js +1 -1
  148. package/dist/lang/uk.umd.prod.js +1 -1
  149. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  150. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  151. package/dist/lang/vi.umd.prod.js +1 -1
  152. package/dist/lang/zh-CN.umd.prod.js +1 -1
  153. package/dist/lang/zh-TW.umd.prod.js +1 -1
  154. package/dist/quasar.addon.prod.css +1 -1
  155. package/dist/quasar.addon.rtl.prod.css +1 -1
  156. package/dist/quasar.cjs.prod.js +2 -2
  157. package/dist/quasar.esm.js +136 -43
  158. package/dist/quasar.esm.prod.js +2 -2
  159. package/dist/quasar.prod.css +1 -1
  160. package/dist/quasar.rtl.prod.css +1 -1
  161. package/dist/quasar.sass +1 -1
  162. package/dist/quasar.umd.js +136 -43
  163. package/dist/quasar.umd.prod.js +2 -2
  164. package/dist/types/api/qtree.d.ts +115 -21
  165. package/dist/types/index.d.ts +98 -83
  166. package/dist/vetur/quasar-attributes.json +70 -66
  167. package/dist/vetur/quasar-tags.json +2 -1
  168. package/dist/web-types/web-types.json +134 -184
  169. package/lang/de-CH.js +98 -0
  170. package/lang/de-CH.mjs +93 -0
  171. package/lang/de-DE.js +98 -0
  172. package/lang/de-DE.mjs +93 -0
  173. package/lang/index.json +8 -0
  174. package/lang/mk.js +4 -4
  175. package/lang/mk.mjs +4 -4
  176. package/package.json +4 -3
  177. package/src/api.extends.json +2 -1
  178. package/src/components/btn/use-btn.json +2 -1
  179. package/src/components/checkbox/use-checkbox.json +1 -1
  180. package/src/components/chip/QChip.json +2 -1
  181. package/src/components/date/QDate.js +4 -4
  182. package/src/components/fab/use-fab.json +2 -1
  183. package/src/components/field/QField.js +14 -2
  184. package/src/components/field/QField.json +7 -0
  185. package/src/components/field/__tests__/QField.cy.js +156 -0
  186. package/src/components/img/QImg.json +1 -1
  187. package/src/components/input/QInput.json +2 -1
  188. package/src/components/input/use-mask.js +6 -1
  189. package/src/components/intersection/QIntersection.json +2 -1
  190. package/src/components/item/QItem.js +1 -1
  191. package/src/components/item/QItem.json +3 -3
  192. package/src/components/menu/QMenu.json +4 -0
  193. package/src/components/pagination/QPagination.json +9 -5
  194. package/src/components/scroll-area/QScrollArea.js +16 -1
  195. package/src/components/scroll-area/QScrollArea.json +2 -1
  196. package/src/components/select/QSelect.js +42 -17
  197. package/src/components/select/QSelect.json +3 -2
  198. package/src/components/select/__tests__/QSelect.cy.js +2 -1
  199. package/src/components/table/QTable.json +38 -1
  200. package/src/components/table/table-sort.js +5 -0
  201. package/src/components/time/QTime.js +16 -3
  202. package/src/components/time/QTime.json +4 -3
  203. package/src/components/tooltip/QTooltip.json +4 -0
  204. package/src/components/tree/QTree.js +8 -3
  205. package/src/components/virtual-scroll/use-virtual-scroll.json +1 -1
  206. package/src/composables/private/__tests__/FieldWrapper.vue +17 -2
  207. package/src/composables/private/__tests__/use-field.cy.js +334 -137
  208. package/src/composables/private/__tests__/use-validate.cy.js +162 -15
  209. package/src/composables/private/use-field.js +21 -8
  210. package/src/composables/private/use-validate.json +2 -1
package/dist/quasar.sass CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.12.7
2
+ * Quasar Framework v2.13.1
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.12.7
2
+ * Quasar Framework v2.13.1
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -1653,7 +1653,7 @@
1653
1653
  }
1654
1654
 
1655
1655
  var installQuasar = function (parentApp, opts = {}) {
1656
- const $q = { version: '2.12.7' };
1656
+ const $q = { version: '2.13.1' };
1657
1657
 
1658
1658
  if (globalConfigIsFrozen === false) {
1659
1659
  if (opts.config !== void 0) {
@@ -14096,17 +14096,17 @@
14096
14096
 
14097
14097
  function updateViewModel (year, month, time) {
14098
14098
  if (minNav.value !== null && year <= minNav.value.year) {
14099
- year = minNav.value.year;
14100
- if (month < minNav.value.month) {
14099
+ if (month < minNav.value.month || year < minNav.value.year) {
14101
14100
  month = minNav.value.month;
14102
14101
  }
14102
+ year = minNav.value.year;
14103
14103
  }
14104
14104
 
14105
14105
  if (maxNav.value !== null && year >= maxNav.value.year) {
14106
- year = maxNav.value.year;
14107
- if (month > maxNav.value.month) {
14106
+ if (month > maxNav.value.month || year > maxNav.value.year) {
14108
14107
  month = maxNav.value.month;
14109
14108
  }
14109
+ year = maxNav.value.year;
14110
14110
  }
14111
14111
 
14112
14112
  if (time !== void 0) {
@@ -16743,7 +16743,7 @@
16743
16743
  }
16744
16744
 
16745
16745
  function onKeyup (e) {
16746
- if (isClickable.value === true && isKeyCode(e, 13) === true) {
16746
+ if (isClickable.value === true && isKeyCode(e, [ 13, 32 ]) === true) {
16747
16747
  stopAndPrevent(e);
16748
16748
 
16749
16749
  // for ripple
@@ -18920,8 +18920,10 @@
18920
18920
  }
18921
18921
  }
18922
18922
 
18923
- function getTargetUid (val) {
18924
- return val === void 0 ? `f_${ uid$3() }` : val
18923
+ function getTargetUid (val, requiredForAttr) {
18924
+ return val === void 0
18925
+ ? (requiredForAttr === true ? `f_${ uid$3() }` : void 0)
18926
+ : val
18925
18927
  }
18926
18928
 
18927
18929
  function fieldValueIsFilled (val) {
@@ -18980,12 +18982,17 @@
18980
18982
 
18981
18983
  const useFieldEmits = [ 'update:modelValue', 'clear', 'focus', 'blur', 'popupShow', 'popupHide' ];
18982
18984
 
18983
- function useFieldState () {
18985
+ function useFieldState ({ requiredForAttr = true, tagProp } = {}) {
18984
18986
  const { props, attrs, proxy, vnode } = vue.getCurrentInstance();
18985
18987
 
18986
18988
  const isDark = useDark(props, proxy.$q);
18987
18989
 
18988
18990
  return {
18991
+ requiredForAttr,
18992
+ tag: tagProp === true
18993
+ ? vue.computed(() => props.tag)
18994
+ : { value: 'label' },
18995
+
18989
18996
  isDark,
18990
18997
 
18991
18998
  editable: vue.computed(() =>
@@ -18997,7 +19004,9 @@
18997
19004
  hasPopupOpen: false,
18998
19005
 
18999
19006
  splitAttrs: useSplitAttrs(attrs, vnode),
19000
- targetUid: vue.ref(getTargetUid(props.for)),
19007
+ targetUid: vue.ref(
19008
+ getTargetUid(props.for, requiredForAttr)
19009
+ ),
19001
19010
 
19002
19011
  rootRef: vue.ref(null),
19003
19012
  targetRef: vue.ref(null),
@@ -19166,7 +19175,7 @@
19166
19175
  vue.watch(() => props.for, val => {
19167
19176
  // don't transform targetUid into a computed
19168
19177
  // prop as it will break SSR
19169
- state.targetUid.value = getTargetUid(val);
19178
+ state.targetUid.value = getTargetUid(val, state.requiredForAttr);
19170
19179
  });
19171
19180
 
19172
19181
  function focusHandler () {
@@ -19451,8 +19460,12 @@
19451
19460
  });
19452
19461
 
19453
19462
  vue.onMounted(() => {
19454
- if (isRuntimeSsrPreHydration.value === true && props.for === void 0) {
19455
- state.targetUid.value = getTargetUid();
19463
+ if (
19464
+ isRuntimeSsrPreHydration.value === true
19465
+ && state.requiredForAttr === true
19466
+ && props.for === void 0
19467
+ ) {
19468
+ state.targetUid.value = `f_${ uid$3() }`; // getTargetUid(void 0, true)
19456
19469
  }
19457
19470
 
19458
19471
  props.autofocus === true && proxy.focus();
@@ -19474,7 +19487,7 @@
19474
19487
  }
19475
19488
  : attributes.value;
19476
19489
 
19477
- return vue.h('label', {
19490
+ return vue.h(state.tag.value, {
19478
19491
  ref: state.rootRef,
19479
19492
  class: [
19480
19493
  classes.value,
@@ -19520,12 +19533,24 @@
19520
19533
 
19521
19534
  inheritAttrs: false,
19522
19535
 
19523
- props: useFieldProps,
19536
+ props: {
19537
+ ...useFieldProps,
19538
+
19539
+ tag: {
19540
+ type: String,
19541
+ default: 'label'
19542
+ }
19543
+ },
19524
19544
 
19525
19545
  emits: useFieldEmits,
19526
19546
 
19527
19547
  setup () {
19528
- return useField(useFieldState())
19548
+ return useField(
19549
+ useFieldState({
19550
+ requiredForAttr: false,
19551
+ tagProp: true
19552
+ })
19553
+ )
19529
19554
  }
19530
19555
  });
19531
19556
 
@@ -21616,7 +21641,12 @@
21616
21641
  ? unmaskValue(masked)
21617
21642
  : masked;
21618
21643
 
21619
- String(props.modelValue) !== val && emitValue(val, true);
21644
+ if (
21645
+ String(props.modelValue) !== val
21646
+ && (props.modelValue !== null || val !== '')
21647
+ ) {
21648
+ emitValue(val, true);
21649
+ }
21620
21650
  }
21621
21651
 
21622
21652
  function moveCursorForPaste (inp, start, end) {
@@ -26297,11 +26327,26 @@
26297
26327
  targetRef.value[ dirProps[ axis ].scroll ] = offset;
26298
26328
  }
26299
26329
 
26330
+ let mouseEventTimer = null;
26331
+
26300
26332
  function onMouseenter () {
26301
- hover.value = true;
26333
+ if (mouseEventTimer !== null) {
26334
+ clearTimeout(mouseEventTimer);
26335
+ }
26336
+
26337
+ // setTimeout needed for iOS; see ticket #16210
26338
+ mouseEventTimer = setTimeout(() => {
26339
+ mouseEventTimer = null;
26340
+ hover.value = true;
26341
+ }, proxy.$q.platform.is.ios ? 50 : 0);
26302
26342
  }
26303
26343
 
26304
26344
  function onMouseleave () {
26345
+ if (mouseEventTimer !== null) {
26346
+ clearTimeout(mouseEventTimer);
26347
+ mouseEventTimer = null;
26348
+ }
26349
+
26305
26350
  hover.value = false;
26306
26351
  }
26307
26352
 
@@ -27295,7 +27340,8 @@
27295
27340
  const dialogFieldFocused = vue.ref(false);
27296
27341
  const innerLoadingIndicator = vue.ref(false);
27297
27342
 
27298
- let inputTimer = null, innerValueCache,
27343
+ let filterTimer = null, inputValueTimer = null,
27344
+ innerValueCache,
27299
27345
  hasDialog, userInputValue, filterId = null, defaultInputValue,
27300
27346
  transitionShowComputed, searchBuffer, searchBufferExp;
27301
27347
 
@@ -27740,9 +27786,11 @@
27740
27786
  scrollTo(index);
27741
27787
 
27742
27788
  if (skipInputValue !== true && props.useInput === true && props.fillInput === true) {
27743
- setInputValue(index >= 0
27744
- ? getOptionLabel.value(props.options[ index ])
27745
- : defaultInputValue
27789
+ setInputValue(
27790
+ index >= 0
27791
+ ? getOptionLabel.value(props.options[ index ])
27792
+ : defaultInputValue,
27793
+ true
27746
27794
  );
27747
27795
  }
27748
27796
  }
@@ -27803,9 +27851,13 @@
27803
27851
 
27804
27852
  e.target.value = '';
27805
27853
 
27806
- if (inputTimer !== null) {
27807
- clearTimeout(inputTimer);
27808
- inputTimer = null;
27854
+ if (filterTimer !== null) {
27855
+ clearTimeout(filterTimer);
27856
+ filterTimer = null;
27857
+ }
27858
+ if (inputValueTimer !== null) {
27859
+ clearTimeout(inputValueTimer);
27860
+ inputValueTimer = null;
27809
27861
  }
27810
27862
 
27811
27863
  resetInputValue();
@@ -27896,6 +27948,10 @@
27896
27948
  // backspace
27897
27949
  if (
27898
27950
  e.keyCode === 8
27951
+ && (
27952
+ props.useChips === true
27953
+ || props.clearable === true
27954
+ )
27899
27955
  && props.hideSelected !== true
27900
27956
  && inputValue.value.length === 0
27901
27957
  ) {
@@ -27990,7 +28046,7 @@
27990
28046
  scrollTo(index);
27991
28047
 
27992
28048
  if (index >= 0 && props.useInput === true && props.fillInput === true) {
27993
- setInputValue(getOptionLabel.value(props.options[ index ]));
28049
+ setInputValue(getOptionLabel.value(props.options[ index ]), true);
27994
28050
  }
27995
28051
  });
27996
28052
  }
@@ -28176,9 +28232,13 @@
28176
28232
  }
28177
28233
 
28178
28234
  function onInput (e) {
28179
- if (inputTimer !== null) {
28180
- clearTimeout(inputTimer);
28181
- inputTimer = null;
28235
+ if (filterTimer !== null) {
28236
+ clearTimeout(filterTimer);
28237
+ filterTimer = null;
28238
+ }
28239
+ if (inputValueTimer !== null) {
28240
+ clearTimeout(inputValueTimer);
28241
+ inputValueTimer = null;
28182
28242
  }
28183
28243
 
28184
28244
  if (e && e.target && e.target.qComposing === true) {
@@ -28199,17 +28259,26 @@
28199
28259
  }
28200
28260
 
28201
28261
  if (props.onFilter !== void 0) {
28202
- inputTimer = setTimeout(() => {
28203
- inputTimer = null;
28262
+ filterTimer = setTimeout(() => {
28263
+ filterTimer = null;
28204
28264
  filter(inputValue.value);
28205
28265
  }, props.inputDebounce);
28206
28266
  }
28207
28267
  }
28208
28268
 
28209
- function setInputValue (val) {
28269
+ function setInputValue (val, emitImmediately) {
28210
28270
  if (inputValue.value !== val) {
28211
28271
  inputValue.value = val;
28212
- emit('inputValue', val);
28272
+
28273
+ if (emitImmediately === true || props.inputDebounce === 0 || props.inputDebounce === '0') {
28274
+ emit('inputValue', val);
28275
+ }
28276
+ else {
28277
+ inputValueTimer = setTimeout(() => {
28278
+ inputValueTimer = null;
28279
+ emit('inputValue', val);
28280
+ }, props.inputDebounce);
28281
+ }
28213
28282
  }
28214
28283
  }
28215
28284
 
@@ -28217,7 +28286,7 @@
28217
28286
  userInputValue = internal !== true;
28218
28287
 
28219
28288
  if (props.useInput === true) {
28220
- setInputValue(val);
28289
+ setInputValue(val, true);
28221
28290
 
28222
28291
  if (noFiltering === true || internal !== true) {
28223
28292
  defaultInputValue = val;
@@ -28570,7 +28639,8 @@
28570
28639
  updatePreState();
28571
28640
 
28572
28641
  vue.onBeforeUnmount(() => {
28573
- inputTimer !== null && clearTimeout(inputTimer);
28642
+ filterTimer !== null && clearTimeout(filterTimer);
28643
+ inputValueTimer !== null && clearTimeout(inputValueTimer);
28574
28644
  });
28575
28645
 
28576
28646
  // expose public methods
@@ -31894,6 +31964,9 @@
31894
31964
  A = val(a),
31895
31965
  B = val(b);
31896
31966
 
31967
+ if (col.rawSort !== void 0) {
31968
+ return col.rawSort(A, B, a, b) * dir
31969
+ }
31897
31970
  if (A === null || A === void 0) {
31898
31971
  return -1 * dir
31899
31972
  }
@@ -31901,6 +31974,8 @@
31901
31974
  return 1 * dir
31902
31975
  }
31903
31976
  if (col.sort !== void 0) {
31977
+ // gets called without rows that have null/undefined as value
31978
+ // due to the above two statements
31904
31979
  return col.sort(A, B, a, b) * dir
31905
31980
  }
31906
31981
  if (isNumber(A) === true && isNumber(B) === true) {
@@ -34255,23 +34330,36 @@
34255
34330
  }
34256
34331
  }
34257
34332
 
34333
+ function goToViewWhenHasModel (newView) {
34334
+ const model = props.modelValue;
34335
+ if (
34336
+ view.value !== newView
34337
+ && model !== void 0
34338
+ && model !== null
34339
+ && model !== ''
34340
+ && typeof model !== 'string'
34341
+ ) {
34342
+ view.value = newView;
34343
+ }
34344
+ }
34345
+
34258
34346
  function verifyAndUpdate () {
34259
34347
  if (hourInSelection.value !== null && hourInSelection.value(innerModel.value.hour) !== true) {
34260
34348
  innerModel.value = __splitDate();
34261
- view.value = 'hour';
34349
+ goToViewWhenHasModel('hour');
34262
34350
  return
34263
34351
  }
34264
34352
 
34265
34353
  if (minuteInSelection.value !== null && minuteInSelection.value(innerModel.value.minute) !== true) {
34266
34354
  innerModel.value.minute = null;
34267
34355
  innerModel.value.second = null;
34268
- view.value = 'minute';
34356
+ goToViewWhenHasModel('minute');
34269
34357
  return
34270
34358
  }
34271
34359
 
34272
34360
  if (props.withSeconds === true && secondInSelection.value !== null && secondInSelection.value(innerModel.value.second) !== true) {
34273
34361
  innerModel.value.second = null;
34274
- view.value = 'second';
34362
+ goToViewWhenHasModel('second');
34275
34363
  return
34276
34364
  }
34277
34365
 
@@ -35157,6 +35245,8 @@
35157
35245
  + (m.selected === true ? ' q-tree__node--selected' : '')
35158
35246
  + (m.disabled === true ? ' q-tree__node--disabled' : ''),
35159
35247
  tabindex: m.link === true ? 0 : -1,
35248
+ ariaExpanded: children.length > 0 ? m.expanded : null,
35249
+ role: 'treeitem',
35160
35250
  onClick: (e) => {
35161
35251
  onClick(node, m, e);
35162
35252
  },
@@ -35230,7 +35320,8 @@
35230
35320
  body,
35231
35321
  vue.h('div', {
35232
35322
  class: 'q-tree__children'
35233
- + (m.disabled === true ? ' q-tree__node--disabled' : '')
35323
+ + (m.disabled === true ? ' q-tree__node--disabled' : ''),
35324
+ role: 'group'
35234
35325
  }, children)
35235
35326
  ])
35236
35327
  : null
@@ -35248,7 +35339,8 @@
35248
35339
  body,
35249
35340
  vue.h('div', {
35250
35341
  class: 'q-tree__children'
35251
- + (m.disabled === true ? ' q-tree__node--disabled' : '')
35342
+ + (m.disabled === true ? ' q-tree__node--disabled' : ''),
35343
+ role: 'group'
35252
35344
  }, children)
35253
35345
  ]),
35254
35346
  [ [ vue.vShow, m.expanded ] ]
@@ -35342,7 +35434,8 @@
35342
35434
 
35343
35435
  return vue.h(
35344
35436
  'div', {
35345
- class: classes.value
35437
+ class: classes.value,
35438
+ role: 'tree'
35346
35439
  },
35347
35440
  children.length === 0
35348
35441
  ? (
@@ -40932,7 +41025,7 @@
40932
41025
  */
40933
41026
 
40934
41027
  var index_umd = {
40935
- version: '2.12.7',
41028
+ version: '2.13.1',
40936
41029
  install (app, opts) {
40937
41030
  installQuasar(app, {
40938
41031
  components,