quasar 2.14.2 → 2.14.3

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 (133) hide show
  1. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  2. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  3. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  4. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  5. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  6. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  7. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  8. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  9. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  10. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  11. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  12. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  13. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  14. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  15. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  16. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  17. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  18. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  19. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  20. package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
  21. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  22. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  23. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  24. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  25. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  26. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  39. package/dist/icon-set/themify.umd.prod.js +1 -1
  40. package/dist/lang/ar-TN.umd.prod.js +1 -1
  41. package/dist/lang/ar.umd.prod.js +1 -1
  42. package/dist/lang/az-Latn.umd.prod.js +1 -1
  43. package/dist/lang/bg.umd.prod.js +1 -1
  44. package/dist/lang/bn.umd.prod.js +1 -1
  45. package/dist/lang/ca.umd.prod.js +1 -1
  46. package/dist/lang/cs.umd.prod.js +1 -1
  47. package/dist/lang/da.umd.prod.js +1 -1
  48. package/dist/lang/de-CH.umd.prod.js +1 -1
  49. package/dist/lang/de-DE.umd.prod.js +1 -1
  50. package/dist/lang/de.umd.prod.js +1 -1
  51. package/dist/lang/el.umd.prod.js +1 -1
  52. package/dist/lang/en-GB.umd.prod.js +1 -1
  53. package/dist/lang/en-US.umd.prod.js +1 -1
  54. package/dist/lang/eo.umd.prod.js +1 -1
  55. package/dist/lang/es.umd.prod.js +1 -1
  56. package/dist/lang/et.umd.prod.js +1 -1
  57. package/dist/lang/eu.umd.prod.js +1 -1
  58. package/dist/lang/fa-IR.umd.prod.js +1 -1
  59. package/dist/lang/fa.umd.prod.js +1 -1
  60. package/dist/lang/fi.umd.prod.js +1 -1
  61. package/dist/lang/fr.umd.prod.js +1 -1
  62. package/dist/lang/gn.umd.prod.js +1 -1
  63. package/dist/lang/he.umd.prod.js +1 -1
  64. package/dist/lang/hi.umd.prod.js +1 -1
  65. package/dist/lang/hr.umd.prod.js +1 -1
  66. package/dist/lang/hu.umd.prod.js +1 -1
  67. package/dist/lang/id.umd.prod.js +1 -1
  68. package/dist/lang/is.umd.prod.js +1 -1
  69. package/dist/lang/it.umd.prod.js +1 -1
  70. package/dist/lang/ja.umd.prod.js +1 -1
  71. package/dist/lang/kk.umd.prod.js +1 -1
  72. package/dist/lang/km.umd.prod.js +1 -1
  73. package/dist/lang/ko-KR.umd.prod.js +1 -1
  74. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  75. package/dist/lang/lt.umd.prod.js +1 -1
  76. package/dist/lang/lu.umd.prod.js +1 -1
  77. package/dist/lang/lv.umd.prod.js +1 -1
  78. package/dist/lang/mk.umd.prod.js +1 -1
  79. package/dist/lang/ml.umd.prod.js +1 -1
  80. package/dist/lang/mm.umd.prod.js +1 -1
  81. package/dist/lang/ms.umd.prod.js +1 -1
  82. package/dist/lang/my.umd.prod.js +1 -1
  83. package/dist/lang/nb-NO.umd.prod.js +1 -1
  84. package/dist/lang/nl.umd.prod.js +1 -1
  85. package/dist/lang/pl.umd.prod.js +1 -1
  86. package/dist/lang/pt-BR.umd.prod.js +1 -1
  87. package/dist/lang/pt.umd.prod.js +1 -1
  88. package/dist/lang/ro.umd.prod.js +1 -1
  89. package/dist/lang/ru.umd.prod.js +1 -1
  90. package/dist/lang/sk.umd.prod.js +1 -1
  91. package/dist/lang/sl.umd.prod.js +1 -1
  92. package/dist/lang/sm.umd.prod.js +1 -1
  93. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  94. package/dist/lang/sr.umd.prod.js +1 -1
  95. package/dist/lang/sv.umd.prod.js +1 -1
  96. package/dist/lang/ta.umd.prod.js +1 -1
  97. package/dist/lang/th.umd.prod.js +1 -1
  98. package/dist/lang/tr.umd.prod.js +1 -1
  99. package/dist/lang/ug.umd.prod.js +1 -1
  100. package/dist/lang/uk.umd.prod.js +1 -1
  101. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  102. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  103. package/dist/lang/vi.umd.prod.js +1 -1
  104. package/dist/lang/zh-CN.umd.prod.js +1 -1
  105. package/dist/lang/zh-TW.umd.prod.js +1 -1
  106. package/dist/quasar.cjs.prod.js +2 -2
  107. package/dist/quasar.esm.js +90 -102
  108. package/dist/quasar.esm.prod.js +2 -2
  109. package/dist/quasar.sass +1 -1
  110. package/dist/quasar.umd.js +90 -102
  111. package/dist/quasar.umd.prod.js +2 -2
  112. package/dist/web-types/web-types.json +1 -1
  113. package/package.json +2 -2
  114. package/src/components/ajax-bar/QAjaxBar.js +12 -2
  115. package/src/components/btn-dropdown/QBtnDropdown.js +4 -4
  116. package/src/components/expansion-item/QExpansionItem.js +4 -3
  117. package/src/components/fab/QFab.js +4 -4
  118. package/src/components/icon/QIcon.js +3 -3
  119. package/src/components/infinite-scroll/QInfiniteScroll.js +1 -1
  120. package/src/components/menu/__tests__/QMenu.cy.js +24 -0
  121. package/src/components/tabs/use-tab.js +1 -1
  122. package/src/composables/private/use-field.js +13 -30
  123. package/src/composables/private/use-id.js +34 -0
  124. package/src/composables/private/use-validate.js +16 -29
  125. package/src/plugins/Dark.js +3 -27
  126. package/src/utils/copy-to-clipboard.js +0 -1
  127. package/src/utils/get-css-var.js +0 -1
  128. package/src/utils/is.js +0 -1
  129. package/src/utils/private/define-reactive-plugin.js +0 -1
  130. package/src/utils/private/global-config.js +0 -1
  131. package/src/utils/private/touch.js +0 -1
  132. package/src/utils/private/vm.js +0 -1
  133. package/src/utils/run-sequential-promises.js +0 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.14.2
2
+ * Quasar Framework v2.14.3
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -796,36 +796,13 @@ const Plugin$9 = defineReactivePlugin({
796
796
  }
797
797
  },
798
798
 
799
- install ({ $q, onSSRHydrated, ssrContext }) {
799
+ install ({ $q, ssrContext }) {
800
800
  const { dark } = $q.config;
801
801
 
802
802
  $q.dark = this;
803
803
 
804
- if (this.__installed === true && dark === void 0) {
805
- return
806
- }
807
-
808
- this.isActive = dark === true;
809
-
810
- const initialVal = dark !== void 0 ? dark : false;
811
-
812
- if (isRuntimeSsrPreHydration.value === true) {
813
- const ssrSet = val => {
814
- this.__fromSSR = val;
815
- };
816
-
817
- const originalSet = this.set;
818
-
819
- this.set = ssrSet;
820
- ssrSet(initialVal);
821
-
822
- onSSRHydrated.push(() => {
823
- this.set = originalSet;
824
- this.set(this.__fromSSR);
825
- });
826
- }
827
- else {
828
- this.set(initialVal);
804
+ if (this.__installed !== true) {
805
+ this.set(dark !== void 0 ? dark : false);
829
806
  }
830
807
  }
831
808
  });
@@ -1651,7 +1628,7 @@ function prepareApp (app, uiOpts, pluginOpts) {
1651
1628
  }
1652
1629
 
1653
1630
  var installQuasar = function (parentApp, opts = {}) {
1654
- const $q = { version: '2.14.2' };
1631
+ const $q = { version: '2.14.3' };
1655
1632
 
1656
1633
  if (globalConfigIsFrozen === false) {
1657
1634
  if (opts.config !== void 0) {
@@ -1915,13 +1892,23 @@ var QAjaxBar = createComponent({
1915
1892
 
1916
1893
  progress.value = 0;
1917
1894
 
1895
+ /**
1896
+ * We're trying to avoid side effects if start() is called inside a watchEffect()
1897
+ * so we're accessing the _value property directly (under the covers implementation detail of ref())
1898
+ *
1899
+ * Otherwise, any refs() accessed here would be marked as deps for the watchEffect()
1900
+ * -- and we are changing them below, which would cause an infinite loop
1901
+ */
1902
+
1918
1903
  timer = setTimeout(() => {
1919
1904
  timer = null;
1920
1905
  animate.value = true;
1921
1906
  newSpeed > 0 && planNextStep();
1922
- }, onScreen.value === true ? 500 : 1);
1907
+ // eslint-disable-next-line vue/no-ref-as-operand
1908
+ }, onScreen._value === true ? 500 : 1);
1923
1909
 
1924
- if (onScreen.value !== true) {
1910
+ // eslint-disable-next-line vue/no-ref-as-operand
1911
+ if (onScreen._value !== true) {
1925
1912
  onScreen.value = true;
1926
1913
  animate.value = false;
1927
1914
  }
@@ -2280,13 +2267,13 @@ var QIcon = createComponent({
2280
2267
  }
2281
2268
 
2282
2269
  if (type.value.img === true) {
2283
- return h('span', data, hMergeSlot(slots.default, [
2270
+ return h(props.tag, data, hMergeSlot(slots.default, [
2284
2271
  h('img', { src: type.value.src })
2285
2272
  ]))
2286
2273
  }
2287
2274
 
2288
2275
  if (type.value.svg === true) {
2289
- return h('span', data, hMergeSlot(slots.default, [
2276
+ return h(props.tag, data, hMergeSlot(slots.default, [
2290
2277
  h('svg', {
2291
2278
  viewBox: type.value.viewBox || '0 0 24 24'
2292
2279
  }, type.value.nodes)
@@ -2294,7 +2281,7 @@ var QIcon = createComponent({
2294
2281
  }
2295
2282
 
2296
2283
  if (type.value.svguse === true) {
2297
- return h('span', data, hMergeSlot(slots.default, [
2284
+ return h(props.tag, data, hMergeSlot(slots.default, [
2298
2285
  h('svg', {
2299
2286
  viewBox: type.value.viewBox
2300
2287
  }, [
@@ -5862,6 +5849,35 @@ function uid$3 () {
5862
5849
  + hexBytes[ b[ 14 ] ] + hexBytes[ b[ 15 ] ]
5863
5850
  }
5864
5851
 
5852
+ function getId (val, requiredId) {
5853
+ return val === void 0
5854
+ ? (requiredId === true ? `f_${ uid$3() }` : void 0)
5855
+ : val
5856
+ }
5857
+
5858
+ /**
5859
+ * Returns an "id" which is a ref() that can be used as a unique identifier.
5860
+ * On SSR, it takes care of generating the id on the client side (only) to
5861
+ * avoid hydration errors.
5862
+ */
5863
+ function useId (initialId, requiredId = true) {
5864
+ if (isRuntimeSsrPreHydration.value === true) {
5865
+ const id = ref(initialId);
5866
+
5867
+ if (requiredId === true && initialId === void 0) {
5868
+ onMounted(() => {
5869
+ id.value = `f_${ uid$3() }`; // getId(void 0, true)
5870
+ });
5871
+ }
5872
+
5873
+ return id
5874
+ }
5875
+
5876
+ return ref(
5877
+ getId(initialId, requiredId)
5878
+ )
5879
+ }
5880
+
5865
5881
  const btnPropsList = Object.keys(useBtnProps);
5866
5882
 
5867
5883
  const passBtnProps = props => btnPropsList.reduce(
@@ -5919,13 +5935,13 @@ var QBtnDropdown = createComponent({
5919
5935
 
5920
5936
  const showing = ref(props.modelValue);
5921
5937
  const menuRef = ref(null);
5922
- const targetUid = uid$3();
5938
+ const targetUid = useId();
5923
5939
 
5924
5940
  const ariaAttrs = computed(() => {
5925
5941
  const acc = {
5926
5942
  'aria-expanded': showing.value === true ? 'true' : 'false',
5927
5943
  'aria-haspopup': 'true',
5928
- 'aria-controls': targetUid,
5944
+ 'aria-controls': targetUid.value,
5929
5945
  'aria-label': props.toggleAriaLabel || proxy.$q.lang.label[ showing.value === true ? 'collapse' : 'expand' ](props.label)
5930
5946
  };
5931
5947
 
@@ -6019,7 +6035,7 @@ var QBtnDropdown = createComponent({
6019
6035
  props.disableDropdown !== true && Arrow.push(
6020
6036
  h(QMenu, {
6021
6037
  ref: menuRef,
6022
- id: targetUid,
6038
+ id: targetUid.value,
6023
6039
  class: props.contentClass,
6024
6040
  style: props.contentStyle,
6025
6041
  cover: props.cover,
@@ -10506,7 +10522,7 @@ function useTab (props, slots, emit, routeData) {
10506
10522
  if (
10507
10523
  hardError === void 0 && (
10508
10524
  softError === void 0
10509
- || softError.message.startsWith('Avoided redundant navigation') === true
10525
+ || (softError.message !== void 0 && softError.message.startsWith('Avoided redundant navigation') === true)
10510
10526
  )
10511
10527
  ) {
10512
10528
  $tabs.updateModel({ name: props.name });
@@ -18072,7 +18088,7 @@ var QExpansionItem = createComponent({
18072
18088
  );
18073
18089
 
18074
18090
  const blurTargetRef = ref(null);
18075
- const targetUid = uid$3();
18091
+ const targetUid = useId();
18076
18092
 
18077
18093
  const { show, hide, toggle } = useModelToggle({ showing });
18078
18094
 
@@ -18140,7 +18156,7 @@ var QExpansionItem = createComponent({
18140
18156
  return {
18141
18157
  role: 'button',
18142
18158
  'aria-expanded': showing.value === true ? 'true' : 'false',
18143
- 'aria-controls': targetUid,
18159
+ 'aria-controls': targetUid.value,
18144
18160
  'aria-label': toggleAriaLabel
18145
18161
  }
18146
18162
  });
@@ -18317,7 +18333,7 @@ var QExpansionItem = createComponent({
18317
18333
  key: 'e-content',
18318
18334
  class: 'q-expansion-item__content relative-position',
18319
18335
  style: contentStyle.value,
18320
- id: targetUid
18336
+ id: targetUid.value
18321
18337
  }, hSlot(slots.default)),
18322
18338
  [ [
18323
18339
  vShow,
@@ -18492,7 +18508,7 @@ var QFab = createComponent({
18492
18508
  setup (props, { slots }) {
18493
18509
  const triggerRef = ref(null);
18494
18510
  const showing = ref(props.modelValue === true);
18495
- const targetUid = uid$3();
18511
+ const targetUid = useId();
18496
18512
 
18497
18513
  const { proxy: { $q } } = getCurrentInstance();
18498
18514
  const { formClass, labelProps } = useFab(props, showing);
@@ -18520,7 +18536,7 @@ var QFab = createComponent({
18520
18536
 
18521
18537
  const actionAttrs = computed(() => {
18522
18538
  const attrs = {
18523
- id: targetUid,
18539
+ id: targetUid.value,
18524
18540
  role: 'menu'
18525
18541
  };
18526
18542
 
@@ -18592,7 +18608,7 @@ var QFab = createComponent({
18592
18608
  fab: true,
18593
18609
  'aria-expanded': showing.value === true ? 'true' : 'false',
18594
18610
  'aria-haspopup': 'true',
18595
- 'aria-controls': targetUid,
18611
+ 'aria-controls': targetUid.value,
18596
18612
  onClick: toggle
18597
18613
  }, getTriggerContent),
18598
18614
 
@@ -18754,7 +18770,7 @@ function useValidate (focused, innerLoading) {
18754
18770
 
18755
18771
  const innerError = ref(false);
18756
18772
  const innerErrorMessage = ref(null);
18757
- const isDirtyModel = ref(null);
18773
+ const isDirtyModel = ref(false);
18758
18774
 
18759
18775
  useFormChild({ validate, resetValidation });
18760
18776
 
@@ -18797,18 +18813,20 @@ function useValidate (focused, innerLoading) {
18797
18813
  }
18798
18814
  });
18799
18815
 
18816
+ function onRulesChange () {
18817
+ if (
18818
+ props.lazyRules !== 'ondemand'
18819
+ && canDebounceValidate.value === true
18820
+ && isDirtyModel.value === true
18821
+ ) {
18822
+ debouncedValidate();
18823
+ }
18824
+ }
18825
+
18800
18826
  watch(() => props.reactiveRules, val => {
18801
18827
  if (val === true) {
18802
18828
  if (unwatchRules === void 0) {
18803
- unwatchRules = watch(() => props.rules, () => {
18804
- if (
18805
- canDebounceValidate.value === true
18806
- && isDirtyModel.value === true
18807
- && props.lazyRules !== 'ondemand'
18808
- ) {
18809
- debouncedValidate();
18810
- }
18811
- }, { immediate: true });
18829
+ unwatchRules = watch(() => props.rules, onRulesChange, { immediate: true, deep: true });
18812
18830
  }
18813
18831
  }
18814
18832
  else if (unwatchRules !== void 0) {
@@ -18817,30 +18835,15 @@ function useValidate (focused, innerLoading) {
18817
18835
  }
18818
18836
  }, { immediate: true });
18819
18837
 
18820
- watch(() => props.lazyRules, val => {
18821
- if (
18822
- val === false
18823
- && canDebounceValidate.value === true
18824
- && isDirtyModel.value === true
18825
- ) {
18826
- debouncedValidate();
18827
- }
18828
- });
18838
+ watch(() => props.lazyRules, onRulesChange);
18829
18839
 
18830
18840
  watch(focused, val => {
18831
18841
  if (val === true) {
18832
- if (isDirtyModel.value === null) {
18833
- isDirtyModel.value = props.lazyRules === true;
18834
- }
18842
+ isDirtyModel.value = true;
18835
18843
  }
18836
18844
  else if (
18837
18845
  canDebounceValidate.value === true
18838
- && (
18839
- // props.lazyRules can also be 'ondemand',
18840
- // hence the following form:
18841
- props.lazyRules === false
18842
- || (props.lazyRules === true && isDirtyModel.value === true)
18843
- )
18846
+ && props.lazyRules !== 'ondemand'
18844
18847
  ) {
18845
18848
  debouncedValidate();
18846
18849
  }
@@ -18849,7 +18852,7 @@ function useValidate (focused, innerLoading) {
18849
18852
  function resetValidation () {
18850
18853
  validateIndex++;
18851
18854
  innerLoading.value = false;
18852
- isDirtyModel.value = null;
18855
+ isDirtyModel.value = false;
18853
18856
  innerError.value = false;
18854
18857
  innerErrorMessage.value = null;
18855
18858
  debouncedValidate.cancel();
@@ -18956,12 +18959,6 @@ function useValidate (focused, innerLoading) {
18956
18959
  }
18957
18960
  }
18958
18961
 
18959
- function getTargetUid (val, requiredForAttr) {
18960
- return val === void 0
18961
- ? (requiredForAttr === true ? `f_${ uid$3() }` : void 0)
18962
- : val
18963
- }
18964
-
18965
18962
  function fieldValueIsFilled (val) {
18966
18963
  return val !== void 0
18967
18964
  && val !== null
@@ -19022,6 +19019,7 @@ function useFieldState ({ requiredForAttr = true, tagProp } = {}) {
19022
19019
  const { props, attrs, proxy, vnode } = getCurrentInstance();
19023
19020
 
19024
19021
  const isDark = useDark(props, proxy.$q);
19022
+ const targetUid = useId(props.for, requiredForAttr);
19025
19023
 
19026
19024
  return {
19027
19025
  requiredForAttr,
@@ -19040,9 +19038,7 @@ function useFieldState ({ requiredForAttr = true, tagProp } = {}) {
19040
19038
  hasPopupOpen: false,
19041
19039
 
19042
19040
  splitAttrs: useSplitAttrs(attrs, vnode),
19043
- targetUid: ref(
19044
- getTargetUid(props.for, requiredForAttr)
19045
- ),
19041
+ targetUid,
19046
19042
 
19047
19043
  rootRef: ref(null),
19048
19044
  targetRef: ref(null),
@@ -19194,9 +19190,11 @@ function useField (state) {
19194
19190
  }));
19195
19191
 
19196
19192
  const attributes = computed(() => {
19197
- const acc = {
19198
- for: state.targetUid.value
19199
- };
19193
+ const acc = {};
19194
+
19195
+ if (state.targetUid.value) {
19196
+ acc.for = state.targetUid.value;
19197
+ }
19200
19198
 
19201
19199
  if (props.disable === true) {
19202
19200
  acc[ 'aria-disabled' ] = 'true';
@@ -19208,7 +19206,7 @@ function useField (state) {
19208
19206
  watch(() => props.for, val => {
19209
19207
  // don't transform targetUid into a computed
19210
19208
  // prop as it will break SSR
19211
- state.targetUid.value = getTargetUid(val, state.requiredForAttr);
19209
+ state.targetUid.value = getId(val, state.requiredForAttr);
19212
19210
  });
19213
19211
 
19214
19212
  function focusHandler () {
@@ -19284,7 +19282,7 @@ function useField (state) {
19284
19282
  document.activeElement.blur();
19285
19283
  }
19286
19284
 
19287
- if (props.type === 'file') { // TODO vue3
19285
+ if (props.type === 'file') {
19288
19286
  // do not let focus be triggered
19289
19287
  // as it will make the native file dialog
19290
19288
  // appear for another selection
@@ -19295,11 +19293,9 @@ function useField (state) {
19295
19293
  emit('clear', props.modelValue);
19296
19294
 
19297
19295
  nextTick(() => {
19296
+ const isDirty = isDirtyModel.value;
19298
19297
  resetValidation();
19299
-
19300
- if ($q.platform.is.mobile !== true) {
19301
- isDirtyModel.value = false;
19302
- }
19298
+ isDirtyModel.value = isDirty;
19303
19299
  });
19304
19300
  }
19305
19301
 
@@ -19492,16 +19488,8 @@ function useField (state) {
19492
19488
  shouldActivate === true && props.autofocus === true && proxy.focus();
19493
19489
  });
19494
19490
 
19495
- onMounted(() => {
19496
- if (
19497
- isRuntimeSsrPreHydration.value === true
19498
- && state.requiredForAttr === true
19499
- && props.for === void 0
19500
- ) {
19501
- state.targetUid.value = `f_${ uid$3() }`; // getTargetUid(void 0, true)
19502
- }
19503
-
19504
- props.autofocus === true && proxy.focus();
19491
+ props.autofocus === true && onMounted(() => {
19492
+ proxy.focus();
19505
19493
  });
19506
19494
 
19507
19495
  onBeforeUnmount(() => {
@@ -21285,7 +21273,7 @@ var QInfiniteScroll = createComponent({
21285
21273
  const vm = getCurrentInstance();
21286
21274
  Object.assign(vm.proxy, {
21287
21275
  poll: () => { poll !== void 0 && poll(); },
21288
- trigger, stop, reset, resume, setIndex
21276
+ trigger, stop, reset, resume, setIndex, updateScrollTarget
21289
21277
  });
21290
21278
 
21291
21279
  return () => {
@@ -40873,7 +40861,7 @@ function runSequentialPromises (
40873
40861
  */
40874
40862
 
40875
40863
  const Quasar = {
40876
- version: '2.14.2',
40864
+ version: '2.14.3',
40877
40865
  install: installQuasar,
40878
40866
  lang: Plugin$8,
40879
40867
  iconSet: Plugin$7