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
@@ -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
  */
@@ -1651,7 +1651,7 @@ function prepareApp (app, uiOpts, pluginOpts) {
1651
1651
  }
1652
1652
 
1653
1653
  var installQuasar = function (parentApp, opts = {}) {
1654
- const $q = { version: '2.12.7' };
1654
+ const $q = { version: '2.13.1' };
1655
1655
 
1656
1656
  if (globalConfigIsFrozen === false) {
1657
1657
  if (opts.config !== void 0) {
@@ -14094,17 +14094,17 @@ var QDate = createComponent({
14094
14094
 
14095
14095
  function updateViewModel (year, month, time) {
14096
14096
  if (minNav.value !== null && year <= minNav.value.year) {
14097
- year = minNav.value.year;
14098
- if (month < minNav.value.month) {
14097
+ if (month < minNav.value.month || year < minNav.value.year) {
14099
14098
  month = minNav.value.month;
14100
14099
  }
14100
+ year = minNav.value.year;
14101
14101
  }
14102
14102
 
14103
14103
  if (maxNav.value !== null && year >= maxNav.value.year) {
14104
- year = maxNav.value.year;
14105
- if (month > maxNav.value.month) {
14104
+ if (month > maxNav.value.month || year > maxNav.value.year) {
14106
14105
  month = maxNav.value.month;
14107
14106
  }
14107
+ year = maxNav.value.year;
14108
14108
  }
14109
14109
 
14110
14110
  if (time !== void 0) {
@@ -16741,7 +16741,7 @@ var QItem = createComponent({
16741
16741
  }
16742
16742
 
16743
16743
  function onKeyup (e) {
16744
- if (isClickable.value === true && isKeyCode(e, 13) === true) {
16744
+ if (isClickable.value === true && isKeyCode(e, [ 13, 32 ]) === true) {
16745
16745
  stopAndPrevent(e);
16746
16746
 
16747
16747
  // for ripple
@@ -18918,8 +18918,10 @@ function useValidate (focused, innerLoading) {
18918
18918
  }
18919
18919
  }
18920
18920
 
18921
- function getTargetUid (val) {
18922
- return val === void 0 ? `f_${ uid$3() }` : val
18921
+ function getTargetUid (val, requiredForAttr) {
18922
+ return val === void 0
18923
+ ? (requiredForAttr === true ? `f_${ uid$3() }` : void 0)
18924
+ : val
18923
18925
  }
18924
18926
 
18925
18927
  function fieldValueIsFilled (val) {
@@ -18978,12 +18980,17 @@ const useFieldProps = {
18978
18980
 
18979
18981
  const useFieldEmits = [ 'update:modelValue', 'clear', 'focus', 'blur', 'popupShow', 'popupHide' ];
18980
18982
 
18981
- function useFieldState () {
18983
+ function useFieldState ({ requiredForAttr = true, tagProp } = {}) {
18982
18984
  const { props, attrs, proxy, vnode } = getCurrentInstance();
18983
18985
 
18984
18986
  const isDark = useDark(props, proxy.$q);
18985
18987
 
18986
18988
  return {
18989
+ requiredForAttr,
18990
+ tag: tagProp === true
18991
+ ? computed(() => props.tag)
18992
+ : { value: 'label' },
18993
+
18987
18994
  isDark,
18988
18995
 
18989
18996
  editable: computed(() =>
@@ -18995,7 +19002,9 @@ function useFieldState () {
18995
19002
  hasPopupOpen: false,
18996
19003
 
18997
19004
  splitAttrs: useSplitAttrs(attrs, vnode),
18998
- targetUid: ref(getTargetUid(props.for)),
19005
+ targetUid: ref(
19006
+ getTargetUid(props.for, requiredForAttr)
19007
+ ),
18999
19008
 
19000
19009
  rootRef: ref(null),
19001
19010
  targetRef: ref(null),
@@ -19164,7 +19173,7 @@ function useField (state) {
19164
19173
  watch(() => props.for, val => {
19165
19174
  // don't transform targetUid into a computed
19166
19175
  // prop as it will break SSR
19167
- state.targetUid.value = getTargetUid(val);
19176
+ state.targetUid.value = getTargetUid(val, state.requiredForAttr);
19168
19177
  });
19169
19178
 
19170
19179
  function focusHandler () {
@@ -19449,8 +19458,12 @@ function useField (state) {
19449
19458
  });
19450
19459
 
19451
19460
  onMounted(() => {
19452
- if (isRuntimeSsrPreHydration.value === true && props.for === void 0) {
19453
- state.targetUid.value = getTargetUid();
19461
+ if (
19462
+ isRuntimeSsrPreHydration.value === true
19463
+ && state.requiredForAttr === true
19464
+ && props.for === void 0
19465
+ ) {
19466
+ state.targetUid.value = `f_${ uid$3() }`; // getTargetUid(void 0, true)
19454
19467
  }
19455
19468
 
19456
19469
  props.autofocus === true && proxy.focus();
@@ -19472,7 +19485,7 @@ function useField (state) {
19472
19485
  }
19473
19486
  : attributes.value;
19474
19487
 
19475
- return h('label', {
19488
+ return h(state.tag.value, {
19476
19489
  ref: state.rootRef,
19477
19490
  class: [
19478
19491
  classes.value,
@@ -19518,12 +19531,24 @@ var QField = createComponent({
19518
19531
 
19519
19532
  inheritAttrs: false,
19520
19533
 
19521
- props: useFieldProps,
19534
+ props: {
19535
+ ...useFieldProps,
19536
+
19537
+ tag: {
19538
+ type: String,
19539
+ default: 'label'
19540
+ }
19541
+ },
19522
19542
 
19523
19543
  emits: useFieldEmits,
19524
19544
 
19525
19545
  setup () {
19526
- return useField(useFieldState())
19546
+ return useField(
19547
+ useFieldState({
19548
+ requiredForAttr: false,
19549
+ tagProp: true
19550
+ })
19551
+ )
19527
19552
  }
19528
19553
  });
19529
19554
 
@@ -21619,7 +21644,12 @@ function useMask (props, emit, emitValue, inputRef) {
21619
21644
  ? unmaskValue(masked)
21620
21645
  : masked;
21621
21646
 
21622
- String(props.modelValue) !== val && emitValue(val, true);
21647
+ if (
21648
+ String(props.modelValue) !== val
21649
+ && (props.modelValue !== null || val !== '')
21650
+ ) {
21651
+ emitValue(val, true);
21652
+ }
21623
21653
  }
21624
21654
 
21625
21655
  function moveCursorForPaste (inp, start, end) {
@@ -26300,11 +26330,26 @@ var QScrollArea = createComponent({
26300
26330
  targetRef.value[ dirProps[ axis ].scroll ] = offset;
26301
26331
  }
26302
26332
 
26333
+ let mouseEventTimer = null;
26334
+
26303
26335
  function onMouseenter () {
26304
- hover.value = true;
26336
+ if (mouseEventTimer !== null) {
26337
+ clearTimeout(mouseEventTimer);
26338
+ }
26339
+
26340
+ // setTimeout needed for iOS; see ticket #16210
26341
+ mouseEventTimer = setTimeout(() => {
26342
+ mouseEventTimer = null;
26343
+ hover.value = true;
26344
+ }, proxy.$q.platform.is.ios ? 50 : 0);
26305
26345
  }
26306
26346
 
26307
26347
  function onMouseleave () {
26348
+ if (mouseEventTimer !== null) {
26349
+ clearTimeout(mouseEventTimer);
26350
+ mouseEventTimer = null;
26351
+ }
26352
+
26308
26353
  hover.value = false;
26309
26354
  }
26310
26355
 
@@ -27298,7 +27343,8 @@ var QSelect = createComponent({
27298
27343
  const dialogFieldFocused = ref(false);
27299
27344
  const innerLoadingIndicator = ref(false);
27300
27345
 
27301
- let inputTimer = null, innerValueCache,
27346
+ let filterTimer = null, inputValueTimer = null,
27347
+ innerValueCache,
27302
27348
  hasDialog, userInputValue, filterId = null, defaultInputValue,
27303
27349
  transitionShowComputed, searchBuffer, searchBufferExp;
27304
27350
 
@@ -27743,9 +27789,11 @@ var QSelect = createComponent({
27743
27789
  scrollTo(index);
27744
27790
 
27745
27791
  if (skipInputValue !== true && props.useInput === true && props.fillInput === true) {
27746
- setInputValue(index >= 0
27747
- ? getOptionLabel.value(props.options[ index ])
27748
- : defaultInputValue
27792
+ setInputValue(
27793
+ index >= 0
27794
+ ? getOptionLabel.value(props.options[ index ])
27795
+ : defaultInputValue,
27796
+ true
27749
27797
  );
27750
27798
  }
27751
27799
  }
@@ -27806,9 +27854,13 @@ var QSelect = createComponent({
27806
27854
 
27807
27855
  e.target.value = '';
27808
27856
 
27809
- if (inputTimer !== null) {
27810
- clearTimeout(inputTimer);
27811
- inputTimer = null;
27857
+ if (filterTimer !== null) {
27858
+ clearTimeout(filterTimer);
27859
+ filterTimer = null;
27860
+ }
27861
+ if (inputValueTimer !== null) {
27862
+ clearTimeout(inputValueTimer);
27863
+ inputValueTimer = null;
27812
27864
  }
27813
27865
 
27814
27866
  resetInputValue();
@@ -27899,6 +27951,10 @@ var QSelect = createComponent({
27899
27951
  // backspace
27900
27952
  if (
27901
27953
  e.keyCode === 8
27954
+ && (
27955
+ props.useChips === true
27956
+ || props.clearable === true
27957
+ )
27902
27958
  && props.hideSelected !== true
27903
27959
  && inputValue.value.length === 0
27904
27960
  ) {
@@ -27993,7 +28049,7 @@ var QSelect = createComponent({
27993
28049
  scrollTo(index);
27994
28050
 
27995
28051
  if (index >= 0 && props.useInput === true && props.fillInput === true) {
27996
- setInputValue(getOptionLabel.value(props.options[ index ]));
28052
+ setInputValue(getOptionLabel.value(props.options[ index ]), true);
27997
28053
  }
27998
28054
  });
27999
28055
  }
@@ -28179,9 +28235,13 @@ var QSelect = createComponent({
28179
28235
  }
28180
28236
 
28181
28237
  function onInput (e) {
28182
- if (inputTimer !== null) {
28183
- clearTimeout(inputTimer);
28184
- inputTimer = null;
28238
+ if (filterTimer !== null) {
28239
+ clearTimeout(filterTimer);
28240
+ filterTimer = null;
28241
+ }
28242
+ if (inputValueTimer !== null) {
28243
+ clearTimeout(inputValueTimer);
28244
+ inputValueTimer = null;
28185
28245
  }
28186
28246
 
28187
28247
  if (e && e.target && e.target.qComposing === true) {
@@ -28202,17 +28262,26 @@ var QSelect = createComponent({
28202
28262
  }
28203
28263
 
28204
28264
  if (props.onFilter !== void 0) {
28205
- inputTimer = setTimeout(() => {
28206
- inputTimer = null;
28265
+ filterTimer = setTimeout(() => {
28266
+ filterTimer = null;
28207
28267
  filter(inputValue.value);
28208
28268
  }, props.inputDebounce);
28209
28269
  }
28210
28270
  }
28211
28271
 
28212
- function setInputValue (val) {
28272
+ function setInputValue (val, emitImmediately) {
28213
28273
  if (inputValue.value !== val) {
28214
28274
  inputValue.value = val;
28215
- emit('inputValue', val);
28275
+
28276
+ if (emitImmediately === true || props.inputDebounce === 0 || props.inputDebounce === '0') {
28277
+ emit('inputValue', val);
28278
+ }
28279
+ else {
28280
+ inputValueTimer = setTimeout(() => {
28281
+ inputValueTimer = null;
28282
+ emit('inputValue', val);
28283
+ }, props.inputDebounce);
28284
+ }
28216
28285
  }
28217
28286
  }
28218
28287
 
@@ -28220,7 +28289,7 @@ var QSelect = createComponent({
28220
28289
  userInputValue = internal !== true;
28221
28290
 
28222
28291
  if (props.useInput === true) {
28223
- setInputValue(val);
28292
+ setInputValue(val, true);
28224
28293
 
28225
28294
  if (noFiltering === true || internal !== true) {
28226
28295
  defaultInputValue = val;
@@ -28573,7 +28642,8 @@ var QSelect = createComponent({
28573
28642
  updatePreState();
28574
28643
 
28575
28644
  onBeforeUnmount(() => {
28576
- inputTimer !== null && clearTimeout(inputTimer);
28645
+ filterTimer !== null && clearTimeout(filterTimer);
28646
+ inputValueTimer !== null && clearTimeout(inputValueTimer);
28577
28647
  });
28578
28648
 
28579
28649
  // expose public methods
@@ -31897,6 +31967,9 @@ function useTableSort (props, computedPagination, colList, setPagination) {
31897
31967
  A = val(a),
31898
31968
  B = val(b);
31899
31969
 
31970
+ if (col.rawSort !== void 0) {
31971
+ return col.rawSort(A, B, a, b) * dir
31972
+ }
31900
31973
  if (A === null || A === void 0) {
31901
31974
  return -1 * dir
31902
31975
  }
@@ -31904,6 +31977,8 @@ function useTableSort (props, computedPagination, colList, setPagination) {
31904
31977
  return 1 * dir
31905
31978
  }
31906
31979
  if (col.sort !== void 0) {
31980
+ // gets called without rows that have null/undefined as value
31981
+ // due to the above two statements
31907
31982
  return col.sort(A, B, a, b) * dir
31908
31983
  }
31909
31984
  if (isNumber(A) === true && isNumber(B) === true) {
@@ -34258,23 +34333,36 @@ var QTime = createComponent({
34258
34333
  }
34259
34334
  }
34260
34335
 
34336
+ function goToViewWhenHasModel (newView) {
34337
+ const model = props.modelValue;
34338
+ if (
34339
+ view.value !== newView
34340
+ && model !== void 0
34341
+ && model !== null
34342
+ && model !== ''
34343
+ && typeof model !== 'string'
34344
+ ) {
34345
+ view.value = newView;
34346
+ }
34347
+ }
34348
+
34261
34349
  function verifyAndUpdate () {
34262
34350
  if (hourInSelection.value !== null && hourInSelection.value(innerModel.value.hour) !== true) {
34263
34351
  innerModel.value = __splitDate();
34264
- view.value = 'hour';
34352
+ goToViewWhenHasModel('hour');
34265
34353
  return
34266
34354
  }
34267
34355
 
34268
34356
  if (minuteInSelection.value !== null && minuteInSelection.value(innerModel.value.minute) !== true) {
34269
34357
  innerModel.value.minute = null;
34270
34358
  innerModel.value.second = null;
34271
- view.value = 'minute';
34359
+ goToViewWhenHasModel('minute');
34272
34360
  return
34273
34361
  }
34274
34362
 
34275
34363
  if (props.withSeconds === true && secondInSelection.value !== null && secondInSelection.value(innerModel.value.second) !== true) {
34276
34364
  innerModel.value.second = null;
34277
- view.value = 'second';
34365
+ goToViewWhenHasModel('second');
34278
34366
  return
34279
34367
  }
34280
34368
 
@@ -35160,6 +35248,8 @@ var QTree = createComponent({
35160
35248
  + (m.selected === true ? ' q-tree__node--selected' : '')
35161
35249
  + (m.disabled === true ? ' q-tree__node--disabled' : ''),
35162
35250
  tabindex: m.link === true ? 0 : -1,
35251
+ ariaExpanded: children.length > 0 ? m.expanded : null,
35252
+ role: 'treeitem',
35163
35253
  onClick: (e) => {
35164
35254
  onClick(node, m, e);
35165
35255
  },
@@ -35233,7 +35323,8 @@ var QTree = createComponent({
35233
35323
  body,
35234
35324
  h('div', {
35235
35325
  class: 'q-tree__children'
35236
- + (m.disabled === true ? ' q-tree__node--disabled' : '')
35326
+ + (m.disabled === true ? ' q-tree__node--disabled' : ''),
35327
+ role: 'group'
35237
35328
  }, children)
35238
35329
  ])
35239
35330
  : null
@@ -35251,7 +35342,8 @@ var QTree = createComponent({
35251
35342
  body,
35252
35343
  h('div', {
35253
35344
  class: 'q-tree__children'
35254
- + (m.disabled === true ? ' q-tree__node--disabled' : '')
35345
+ + (m.disabled === true ? ' q-tree__node--disabled' : ''),
35346
+ role: 'group'
35255
35347
  }, children)
35256
35348
  ]),
35257
35349
  [ [ vShow, m.expanded ] ]
@@ -35345,7 +35437,8 @@ var QTree = createComponent({
35345
35437
 
35346
35438
  return h(
35347
35439
  'div', {
35348
- class: classes.value
35440
+ class: classes.value,
35441
+ role: 'tree'
35349
35442
  },
35350
35443
  children.length === 0
35351
35444
  ? (
@@ -40745,7 +40838,7 @@ function runSequentialPromises (
40745
40838
  */
40746
40839
 
40747
40840
  const Quasar = {
40748
- version: '2.12.7',
40841
+ version: '2.13.1',
40749
40842
  install: installQuasar,
40750
40843
  lang: Plugin$8,
40751
40844
  iconSet: Plugin$7