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
package/dist/quasar.sass CHANGED
@@ -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
  */
@@ -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
  */
@@ -798,36 +798,13 @@
798
798
  }
799
799
  },
800
800
 
801
- install ({ $q, onSSRHydrated, ssrContext }) {
801
+ install ({ $q, ssrContext }) {
802
802
  const { dark } = $q.config;
803
803
 
804
804
  $q.dark = this;
805
805
 
806
- if (this.__installed === true && dark === void 0) {
807
- return
808
- }
809
-
810
- this.isActive = dark === true;
811
-
812
- const initialVal = dark !== void 0 ? dark : false;
813
-
814
- if (isRuntimeSsrPreHydration.value === true) {
815
- const ssrSet = val => {
816
- this.__fromSSR = val;
817
- };
818
-
819
- const originalSet = this.set;
820
-
821
- this.set = ssrSet;
822
- ssrSet(initialVal);
823
-
824
- onSSRHydrated.push(() => {
825
- this.set = originalSet;
826
- this.set(this.__fromSSR);
827
- });
828
- }
829
- else {
830
- this.set(initialVal);
806
+ if (this.__installed !== true) {
807
+ this.set(dark !== void 0 ? dark : false);
831
808
  }
832
809
  }
833
810
  });
@@ -1653,7 +1630,7 @@
1653
1630
  }
1654
1631
 
1655
1632
  var installQuasar = function (parentApp, opts = {}) {
1656
- const $q = { version: '2.14.2' };
1633
+ const $q = { version: '2.14.3' };
1657
1634
 
1658
1635
  if (globalConfigIsFrozen === false) {
1659
1636
  if (opts.config !== void 0) {
@@ -1917,13 +1894,23 @@
1917
1894
 
1918
1895
  progress.value = 0;
1919
1896
 
1897
+ /**
1898
+ * We're trying to avoid side effects if start() is called inside a watchEffect()
1899
+ * so we're accessing the _value property directly (under the covers implementation detail of ref())
1900
+ *
1901
+ * Otherwise, any refs() accessed here would be marked as deps for the watchEffect()
1902
+ * -- and we are changing them below, which would cause an infinite loop
1903
+ */
1904
+
1920
1905
  timer = setTimeout(() => {
1921
1906
  timer = null;
1922
1907
  animate.value = true;
1923
1908
  newSpeed > 0 && planNextStep();
1924
- }, onScreen.value === true ? 500 : 1);
1909
+ // eslint-disable-next-line vue/no-ref-as-operand
1910
+ }, onScreen._value === true ? 500 : 1);
1925
1911
 
1926
- if (onScreen.value !== true) {
1912
+ // eslint-disable-next-line vue/no-ref-as-operand
1913
+ if (onScreen._value !== true) {
1927
1914
  onScreen.value = true;
1928
1915
  animate.value = false;
1929
1916
  }
@@ -2282,13 +2269,13 @@
2282
2269
  }
2283
2270
 
2284
2271
  if (type.value.img === true) {
2285
- return vue.h('span', data, hMergeSlot(slots.default, [
2272
+ return vue.h(props.tag, data, hMergeSlot(slots.default, [
2286
2273
  vue.h('img', { src: type.value.src })
2287
2274
  ]))
2288
2275
  }
2289
2276
 
2290
2277
  if (type.value.svg === true) {
2291
- return vue.h('span', data, hMergeSlot(slots.default, [
2278
+ return vue.h(props.tag, data, hMergeSlot(slots.default, [
2292
2279
  vue.h('svg', {
2293
2280
  viewBox: type.value.viewBox || '0 0 24 24'
2294
2281
  }, type.value.nodes)
@@ -2296,7 +2283,7 @@
2296
2283
  }
2297
2284
 
2298
2285
  if (type.value.svguse === true) {
2299
- return vue.h('span', data, hMergeSlot(slots.default, [
2286
+ return vue.h(props.tag, data, hMergeSlot(slots.default, [
2300
2287
  vue.h('svg', {
2301
2288
  viewBox: type.value.viewBox
2302
2289
  }, [
@@ -5864,6 +5851,35 @@
5864
5851
  + hexBytes[ b[ 14 ] ] + hexBytes[ b[ 15 ] ]
5865
5852
  }
5866
5853
 
5854
+ function getId (val, requiredId) {
5855
+ return val === void 0
5856
+ ? (requiredId === true ? `f_${ uid$3() }` : void 0)
5857
+ : val
5858
+ }
5859
+
5860
+ /**
5861
+ * Returns an "id" which is a ref() that can be used as a unique identifier.
5862
+ * On SSR, it takes care of generating the id on the client side (only) to
5863
+ * avoid hydration errors.
5864
+ */
5865
+ function useId (initialId, requiredId = true) {
5866
+ if (isRuntimeSsrPreHydration.value === true) {
5867
+ const id = vue.ref(initialId);
5868
+
5869
+ if (requiredId === true && initialId === void 0) {
5870
+ vue.onMounted(() => {
5871
+ id.value = `f_${ uid$3() }`; // getId(void 0, true)
5872
+ });
5873
+ }
5874
+
5875
+ return id
5876
+ }
5877
+
5878
+ return vue.ref(
5879
+ getId(initialId, requiredId)
5880
+ )
5881
+ }
5882
+
5867
5883
  const btnPropsList = Object.keys(useBtnProps);
5868
5884
 
5869
5885
  const passBtnProps = props => btnPropsList.reduce(
@@ -5921,13 +5937,13 @@
5921
5937
 
5922
5938
  const showing = vue.ref(props.modelValue);
5923
5939
  const menuRef = vue.ref(null);
5924
- const targetUid = uid$3();
5940
+ const targetUid = useId();
5925
5941
 
5926
5942
  const ariaAttrs = vue.computed(() => {
5927
5943
  const acc = {
5928
5944
  'aria-expanded': showing.value === true ? 'true' : 'false',
5929
5945
  'aria-haspopup': 'true',
5930
- 'aria-controls': targetUid,
5946
+ 'aria-controls': targetUid.value,
5931
5947
  'aria-label': props.toggleAriaLabel || proxy.$q.lang.label[ showing.value === true ? 'collapse' : 'expand' ](props.label)
5932
5948
  };
5933
5949
 
@@ -6021,7 +6037,7 @@
6021
6037
  props.disableDropdown !== true && Arrow.push(
6022
6038
  vue.h(QMenu, {
6023
6039
  ref: menuRef,
6024
- id: targetUid,
6040
+ id: targetUid.value,
6025
6041
  class: props.contentClass,
6026
6042
  style: props.contentStyle,
6027
6043
  cover: props.cover,
@@ -10508,7 +10524,7 @@
10508
10524
  if (
10509
10525
  hardError === void 0 && (
10510
10526
  softError === void 0
10511
- || softError.message.startsWith('Avoided redundant navigation') === true
10527
+ || (softError.message !== void 0 && softError.message.startsWith('Avoided redundant navigation') === true)
10512
10528
  )
10513
10529
  ) {
10514
10530
  $tabs.updateModel({ name: props.name });
@@ -18074,7 +18090,7 @@
18074
18090
  );
18075
18091
 
18076
18092
  const blurTargetRef = vue.ref(null);
18077
- const targetUid = uid$3();
18093
+ const targetUid = useId();
18078
18094
 
18079
18095
  const { show, hide, toggle } = useModelToggle({ showing });
18080
18096
 
@@ -18142,7 +18158,7 @@
18142
18158
  return {
18143
18159
  role: 'button',
18144
18160
  'aria-expanded': showing.value === true ? 'true' : 'false',
18145
- 'aria-controls': targetUid,
18161
+ 'aria-controls': targetUid.value,
18146
18162
  'aria-label': toggleAriaLabel
18147
18163
  }
18148
18164
  });
@@ -18319,7 +18335,7 @@
18319
18335
  key: 'e-content',
18320
18336
  class: 'q-expansion-item__content relative-position',
18321
18337
  style: contentStyle.value,
18322
- id: targetUid
18338
+ id: targetUid.value
18323
18339
  }, hSlot(slots.default)),
18324
18340
  [ [
18325
18341
  vue.vShow,
@@ -18494,7 +18510,7 @@
18494
18510
  setup (props, { slots }) {
18495
18511
  const triggerRef = vue.ref(null);
18496
18512
  const showing = vue.ref(props.modelValue === true);
18497
- const targetUid = uid$3();
18513
+ const targetUid = useId();
18498
18514
 
18499
18515
  const { proxy: { $q } } = vue.getCurrentInstance();
18500
18516
  const { formClass, labelProps } = useFab(props, showing);
@@ -18522,7 +18538,7 @@
18522
18538
 
18523
18539
  const actionAttrs = vue.computed(() => {
18524
18540
  const attrs = {
18525
- id: targetUid,
18541
+ id: targetUid.value,
18526
18542
  role: 'menu'
18527
18543
  };
18528
18544
 
@@ -18594,7 +18610,7 @@
18594
18610
  fab: true,
18595
18611
  'aria-expanded': showing.value === true ? 'true' : 'false',
18596
18612
  'aria-haspopup': 'true',
18597
- 'aria-controls': targetUid,
18613
+ 'aria-controls': targetUid.value,
18598
18614
  onClick: toggle
18599
18615
  }, getTriggerContent),
18600
18616
 
@@ -18756,7 +18772,7 @@
18756
18772
 
18757
18773
  const innerError = vue.ref(false);
18758
18774
  const innerErrorMessage = vue.ref(null);
18759
- const isDirtyModel = vue.ref(null);
18775
+ const isDirtyModel = vue.ref(false);
18760
18776
 
18761
18777
  useFormChild({ validate, resetValidation });
18762
18778
 
@@ -18799,18 +18815,20 @@
18799
18815
  }
18800
18816
  });
18801
18817
 
18818
+ function onRulesChange () {
18819
+ if (
18820
+ props.lazyRules !== 'ondemand'
18821
+ && canDebounceValidate.value === true
18822
+ && isDirtyModel.value === true
18823
+ ) {
18824
+ debouncedValidate();
18825
+ }
18826
+ }
18827
+
18802
18828
  vue.watch(() => props.reactiveRules, val => {
18803
18829
  if (val === true) {
18804
18830
  if (unwatchRules === void 0) {
18805
- unwatchRules = vue.watch(() => props.rules, () => {
18806
- if (
18807
- canDebounceValidate.value === true
18808
- && isDirtyModel.value === true
18809
- && props.lazyRules !== 'ondemand'
18810
- ) {
18811
- debouncedValidate();
18812
- }
18813
- }, { immediate: true });
18831
+ unwatchRules = vue.watch(() => props.rules, onRulesChange, { immediate: true, deep: true });
18814
18832
  }
18815
18833
  }
18816
18834
  else if (unwatchRules !== void 0) {
@@ -18819,30 +18837,15 @@
18819
18837
  }
18820
18838
  }, { immediate: true });
18821
18839
 
18822
- vue.watch(() => props.lazyRules, val => {
18823
- if (
18824
- val === false
18825
- && canDebounceValidate.value === true
18826
- && isDirtyModel.value === true
18827
- ) {
18828
- debouncedValidate();
18829
- }
18830
- });
18840
+ vue.watch(() => props.lazyRules, onRulesChange);
18831
18841
 
18832
18842
  vue.watch(focused, val => {
18833
18843
  if (val === true) {
18834
- if (isDirtyModel.value === null) {
18835
- isDirtyModel.value = props.lazyRules === true;
18836
- }
18844
+ isDirtyModel.value = true;
18837
18845
  }
18838
18846
  else if (
18839
18847
  canDebounceValidate.value === true
18840
- && (
18841
- // props.lazyRules can also be 'ondemand',
18842
- // hence the following form:
18843
- props.lazyRules === false
18844
- || (props.lazyRules === true && isDirtyModel.value === true)
18845
- )
18848
+ && props.lazyRules !== 'ondemand'
18846
18849
  ) {
18847
18850
  debouncedValidate();
18848
18851
  }
@@ -18851,7 +18854,7 @@
18851
18854
  function resetValidation () {
18852
18855
  validateIndex++;
18853
18856
  innerLoading.value = false;
18854
- isDirtyModel.value = null;
18857
+ isDirtyModel.value = false;
18855
18858
  innerError.value = false;
18856
18859
  innerErrorMessage.value = null;
18857
18860
  debouncedValidate.cancel();
@@ -18958,12 +18961,6 @@
18958
18961
  }
18959
18962
  }
18960
18963
 
18961
- function getTargetUid (val, requiredForAttr) {
18962
- return val === void 0
18963
- ? (requiredForAttr === true ? `f_${ uid$3() }` : void 0)
18964
- : val
18965
- }
18966
-
18967
18964
  function fieldValueIsFilled (val) {
18968
18965
  return val !== void 0
18969
18966
  && val !== null
@@ -19024,6 +19021,7 @@
19024
19021
  const { props, attrs, proxy, vnode } = vue.getCurrentInstance();
19025
19022
 
19026
19023
  const isDark = useDark(props, proxy.$q);
19024
+ const targetUid = useId(props.for, requiredForAttr);
19027
19025
 
19028
19026
  return {
19029
19027
  requiredForAttr,
@@ -19042,9 +19040,7 @@
19042
19040
  hasPopupOpen: false,
19043
19041
 
19044
19042
  splitAttrs: useSplitAttrs(attrs, vnode),
19045
- targetUid: vue.ref(
19046
- getTargetUid(props.for, requiredForAttr)
19047
- ),
19043
+ targetUid,
19048
19044
 
19049
19045
  rootRef: vue.ref(null),
19050
19046
  targetRef: vue.ref(null),
@@ -19196,9 +19192,11 @@
19196
19192
  }));
19197
19193
 
19198
19194
  const attributes = vue.computed(() => {
19199
- const acc = {
19200
- for: state.targetUid.value
19201
- };
19195
+ const acc = {};
19196
+
19197
+ if (state.targetUid.value) {
19198
+ acc.for = state.targetUid.value;
19199
+ }
19202
19200
 
19203
19201
  if (props.disable === true) {
19204
19202
  acc[ 'aria-disabled' ] = 'true';
@@ -19210,7 +19208,7 @@
19210
19208
  vue.watch(() => props.for, val => {
19211
19209
  // don't transform targetUid into a computed
19212
19210
  // prop as it will break SSR
19213
- state.targetUid.value = getTargetUid(val, state.requiredForAttr);
19211
+ state.targetUid.value = getId(val, state.requiredForAttr);
19214
19212
  });
19215
19213
 
19216
19214
  function focusHandler () {
@@ -19286,7 +19284,7 @@
19286
19284
  document.activeElement.blur();
19287
19285
  }
19288
19286
 
19289
- if (props.type === 'file') { // TODO vue3
19287
+ if (props.type === 'file') {
19290
19288
  // do not let focus be triggered
19291
19289
  // as it will make the native file dialog
19292
19290
  // appear for another selection
@@ -19297,11 +19295,9 @@
19297
19295
  emit('clear', props.modelValue);
19298
19296
 
19299
19297
  vue.nextTick(() => {
19298
+ const isDirty = isDirtyModel.value;
19300
19299
  resetValidation();
19301
-
19302
- if ($q.platform.is.mobile !== true) {
19303
- isDirtyModel.value = false;
19304
- }
19300
+ isDirtyModel.value = isDirty;
19305
19301
  });
19306
19302
  }
19307
19303
 
@@ -19494,16 +19490,8 @@
19494
19490
  shouldActivate === true && props.autofocus === true && proxy.focus();
19495
19491
  });
19496
19492
 
19497
- vue.onMounted(() => {
19498
- if (
19499
- isRuntimeSsrPreHydration.value === true
19500
- && state.requiredForAttr === true
19501
- && props.for === void 0
19502
- ) {
19503
- state.targetUid.value = `f_${ uid$3() }`; // getTargetUid(void 0, true)
19504
- }
19505
-
19506
- props.autofocus === true && proxy.focus();
19493
+ props.autofocus === true && vue.onMounted(() => {
19494
+ proxy.focus();
19507
19495
  });
19508
19496
 
19509
19497
  vue.onBeforeUnmount(() => {
@@ -21282,7 +21270,7 @@
21282
21270
  const vm = vue.getCurrentInstance();
21283
21271
  Object.assign(vm.proxy, {
21284
21272
  poll: () => { poll !== void 0 && poll(); },
21285
- trigger, stop, reset, resume, setIndex
21273
+ trigger, stop, reset, resume, setIndex, updateScrollTarget
21286
21274
  });
21287
21275
 
21288
21276
  return () => {
@@ -41060,7 +41048,7 @@
41060
41048
  */
41061
41049
 
41062
41050
  var index_umd = {
41063
- version: '2.14.2',
41051
+ version: '2.14.3',
41064
41052
  install (app, opts) {
41065
41053
  installQuasar(app, {
41066
41054
  components,