quasar 2.14.1 → 2.14.2

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 (126) hide show
  1. package/dist/api/Notify.json +2 -2
  2. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  3. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  4. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  5. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  6. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  7. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  8. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  9. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  10. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  11. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  12. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  13. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  14. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  15. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  16. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  17. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  18. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  19. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  20. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  21. package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
  22. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +2 -2
  23. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  24. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  25. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  26. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  40. package/dist/icon-set/themify.umd.prod.js +1 -1
  41. package/dist/lang/ar-TN.umd.prod.js +1 -1
  42. package/dist/lang/ar.umd.prod.js +1 -1
  43. package/dist/lang/az-Latn.umd.prod.js +1 -1
  44. package/dist/lang/bg.umd.prod.js +1 -1
  45. package/dist/lang/bn.umd.prod.js +1 -1
  46. package/dist/lang/ca.umd.prod.js +1 -1
  47. package/dist/lang/cs.umd.prod.js +1 -1
  48. package/dist/lang/da.umd.prod.js +1 -1
  49. package/dist/lang/de-CH.umd.prod.js +1 -1
  50. package/dist/lang/de-DE.umd.prod.js +1 -1
  51. package/dist/lang/de.umd.prod.js +1 -1
  52. package/dist/lang/el.umd.prod.js +1 -1
  53. package/dist/lang/en-GB.umd.prod.js +1 -1
  54. package/dist/lang/en-US.umd.prod.js +1 -1
  55. package/dist/lang/eo.umd.prod.js +1 -1
  56. package/dist/lang/es.umd.prod.js +1 -1
  57. package/dist/lang/et.umd.prod.js +1 -1
  58. package/dist/lang/eu.umd.prod.js +1 -1
  59. package/dist/lang/fa-IR.umd.prod.js +1 -1
  60. package/dist/lang/fa.umd.prod.js +1 -1
  61. package/dist/lang/fi.umd.prod.js +1 -1
  62. package/dist/lang/fr.umd.prod.js +1 -1
  63. package/dist/lang/gn.umd.prod.js +1 -1
  64. package/dist/lang/he.umd.prod.js +1 -1
  65. package/dist/lang/hi.umd.prod.js +1 -1
  66. package/dist/lang/hr.umd.prod.js +1 -1
  67. package/dist/lang/hu.umd.prod.js +1 -1
  68. package/dist/lang/id.umd.prod.js +1 -1
  69. package/dist/lang/is.umd.prod.js +1 -1
  70. package/dist/lang/it.umd.prod.js +1 -1
  71. package/dist/lang/ja.umd.prod.js +1 -1
  72. package/dist/lang/kk.umd.prod.js +1 -1
  73. package/dist/lang/km.umd.prod.js +1 -1
  74. package/dist/lang/ko-KR.umd.prod.js +1 -1
  75. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  76. package/dist/lang/lt.umd.prod.js +1 -1
  77. package/dist/lang/lu.umd.prod.js +1 -1
  78. package/dist/lang/lv.umd.prod.js +1 -1
  79. package/dist/lang/mk.umd.prod.js +1 -1
  80. package/dist/lang/ml.umd.prod.js +1 -1
  81. package/dist/lang/mm.umd.prod.js +1 -1
  82. package/dist/lang/ms.umd.prod.js +1 -1
  83. package/dist/lang/my.umd.prod.js +1 -1
  84. package/dist/lang/nb-NO.umd.prod.js +1 -1
  85. package/dist/lang/nl.umd.prod.js +1 -1
  86. package/dist/lang/pl.umd.prod.js +1 -1
  87. package/dist/lang/pt-BR.umd.prod.js +1 -1
  88. package/dist/lang/pt.umd.prod.js +1 -1
  89. package/dist/lang/ro.umd.prod.js +1 -1
  90. package/dist/lang/ru.umd.prod.js +1 -1
  91. package/dist/lang/sk.umd.prod.js +1 -1
  92. package/dist/lang/sl.umd.prod.js +1 -1
  93. package/dist/lang/sm.umd.prod.js +1 -1
  94. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  95. package/dist/lang/sr.umd.prod.js +1 -1
  96. package/dist/lang/sv.umd.prod.js +1 -1
  97. package/dist/lang/ta.umd.prod.js +1 -1
  98. package/dist/lang/th.umd.prod.js +1 -1
  99. package/dist/lang/tr.umd.prod.js +1 -1
  100. package/dist/lang/ug.umd.prod.js +1 -1
  101. package/dist/lang/uk.umd.prod.js +1 -1
  102. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  103. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  104. package/dist/lang/vi.umd.prod.js +1 -1
  105. package/dist/lang/zh-CN.umd.prod.js +1 -1
  106. package/dist/lang/zh-TW.umd.prod.js +1 -1
  107. package/dist/quasar.cjs.prod.js +2 -2
  108. package/dist/quasar.esm.js +90 -71
  109. package/dist/quasar.esm.prod.js +2 -2
  110. package/dist/quasar.sass +1 -1
  111. package/dist/quasar.umd.js +90 -71
  112. package/dist/quasar.umd.prod.js +2 -2
  113. package/dist/types/index.d.ts +2 -2
  114. package/dist/web-types/web-types.json +1 -1
  115. package/package.json +1 -1
  116. package/src/components/color/QColor.js +5 -9
  117. package/src/components/date/QDate.js +1 -1
  118. package/src/components/editor/QEditor.js +1 -1
  119. package/src/components/range/QRange.js +8 -8
  120. package/src/components/resize-observer/QResizeObserver.js +3 -3
  121. package/src/components/slider/QSlider.js +2 -2
  122. package/src/components/slider/use-slider.js +14 -8
  123. package/src/composables/private/use-field.js +0 -3
  124. package/src/composables/private/use-validate.js +49 -30
  125. package/src/plugins/Notify.js +4 -3
  126. package/src/plugins/Notify.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.14.1
2
+ * Quasar Framework v2.14.2
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.14.1' };
1654
+ const $q = { version: '2.14.2' };
1655
1655
 
1656
1656
  if (globalConfigIsFrozen === false) {
1657
1657
  if (opts.config !== void 0) {
@@ -8835,8 +8835,16 @@ function useSlider ({ updateValue, updatePosition, getDragging, formAttrs }) {
8835
8835
  && innerMin.value < innerMax.value
8836
8836
  ));
8837
8837
 
8838
- const decimals = computed(() => (String(props.step).trim().split('.')[ 1 ] || '').length);
8839
- const step = computed(() => (props.step === 0 ? 1 : props.step));
8838
+ const roundValueFn = computed(() => {
8839
+ if (props.step === 0) {
8840
+ return v => v
8841
+ }
8842
+
8843
+ const decimals = (String(props.step).trim().split('.')[ 1 ] || '').length;
8844
+ return v => parseFloat(v.toFixed(decimals))
8845
+ });
8846
+
8847
+ const keyStep = computed(() => (props.step === 0 ? 1 : props.step));
8840
8848
  const tabindex = computed(() => (editable.value === true ? props.tabindex || 0 : -1));
8841
8849
 
8842
8850
  const trackLen = computed(() => props.max - props.min);
@@ -8948,9 +8956,7 @@ function useSlider ({ updateValue, updatePosition, getDragging, formAttrs }) {
8948
8956
  model += (Math.abs(modulo) >= step / 2 ? (modulo < 0 ? -1 : 1) * step : 0) - modulo;
8949
8957
  }
8950
8958
 
8951
- if (decimals.value > 0) {
8952
- model = parseFloat(model.toFixed(decimals.value));
8953
- }
8959
+ model = roundValueFn.value(model);
8954
8960
 
8955
8961
  return between(model, innerMin.value, innerMax.value)
8956
8962
  }
@@ -8976,7 +8982,7 @@ function useSlider ({ updateValue, updatePosition, getDragging, formAttrs }) {
8976
8982
  }
8977
8983
 
8978
8984
  const markerStep = computed(() => (
8979
- isNumber(props.markers) === true ? props.markers : step.value)
8985
+ isNumber(props.markers) === true ? props.markers : keyStep.value)
8980
8986
  );
8981
8987
 
8982
8988
  const markerTicks = computed(() => {
@@ -9336,8 +9342,8 @@ function useSlider ({ updateValue, updatePosition, getDragging, formAttrs }) {
9336
9342
  tabindex,
9337
9343
  attributes,
9338
9344
 
9339
- step,
9340
- decimals,
9345
+ roundValueFn,
9346
+ keyStep,
9341
9347
  trackLen,
9342
9348
  innerMin,
9343
9349
  innerMinRatio,
@@ -9483,7 +9489,7 @@ var QSlider = createComponent({
9483
9489
  stopAndPrevent(evt);
9484
9490
 
9485
9491
  const
9486
- stepVal = ([ 34, 33 ].includes(evt.keyCode) ? 10 : 1) * state.step.value,
9492
+ stepVal = ([ 34, 33 ].includes(evt.keyCode) ? 10 : 1) * state.keyStep.value,
9487
9493
  offset = (
9488
9494
  ([ 34, 37, 40 ].includes(evt.keyCode) ? -1 : 1)
9489
9495
  * (state.isReversed.value === true ? -1 : 1)
@@ -9491,7 +9497,7 @@ var QSlider = createComponent({
9491
9497
  );
9492
9498
 
9493
9499
  model.value = between(
9494
- parseFloat((model.value + offset).toFixed(state.decimals.value)),
9500
+ state.roundValueFn.value(model.value + offset),
9495
9501
  state.innerMin.value,
9496
9502
  state.innerMax.value
9497
9503
  );
@@ -9580,6 +9586,9 @@ var QResizeObserver = createComponent({
9580
9586
 
9581
9587
  const { proxy } = getCurrentInstance();
9582
9588
 
9589
+ // expose public method
9590
+ proxy.trigger = trigger;
9591
+
9583
9592
  if (hasObserver === true) {
9584
9593
  let observer;
9585
9594
 
@@ -9653,9 +9662,6 @@ var QResizeObserver = createComponent({
9653
9662
 
9654
9663
  onBeforeUnmount(cleanup);
9655
9664
 
9656
- // expose public method
9657
- proxy.trigger = trigger;
9658
-
9659
9665
  return () => {
9660
9666
  if (canRender.value === true) {
9661
9667
  return h('object', {
@@ -11177,15 +11183,11 @@ var QColor = createComponent({
11177
11183
  + (isDark.value === true ? ' q-color-picker--dark q-dark' : '')
11178
11184
  );
11179
11185
 
11180
- const attributes = computed(() => {
11181
- if (props.disable === true) {
11182
- return { 'aria-disabled': 'true' }
11183
- }
11184
- if (props.readonly === true) {
11185
- return { 'aria-readonly': 'true' }
11186
- }
11187
- return {}
11188
- });
11186
+ const attributes = computed(() => (
11187
+ props.disable === true
11188
+ ? { 'aria-disabled': 'true' }
11189
+ : {}
11190
+ ));
11189
11191
 
11190
11192
  const spectrumDirective = computed(() => {
11191
11193
  // if editable.value === true
@@ -13895,7 +13897,7 @@ var QDate = createComponent({
13895
13897
  const attributes = computed(() => (
13896
13898
  props.disable === true
13897
13899
  ? { 'aria-disabled': 'true' }
13898
- : (props.readonly === true ? { 'aria-readonly': 'true' } : {})
13900
+ : {}
13899
13901
  ));
13900
13902
 
13901
13903
  watch(() => props.modelValue, v => {
@@ -17543,7 +17545,7 @@ var QEditor = createComponent({
17543
17545
  const attributes = computed(() => (
17544
17546
  props.disable === true
17545
17547
  ? { 'aria-disabled': 'true' }
17546
- : (props.readonly === true ? { 'aria-readonly': 'true' } : {})
17548
+ : {}
17547
17549
  ));
17548
17550
 
17549
17551
  function onInput () {
@@ -18742,6 +18744,7 @@ const useValidateProps = {
18742
18744
  reactiveRules: Boolean,
18743
18745
  lazyRules: {
18744
18746
  type: [ Boolean, String ],
18747
+ default: false, // statement unneeded but avoids future vue implementation changes
18745
18748
  validator: v => lazyRulesValues.includes(v)
18746
18749
  }
18747
18750
  };
@@ -18763,10 +18766,14 @@ function useValidate (focused, innerLoading) {
18763
18766
  && props.rules.length !== 0
18764
18767
  );
18765
18768
 
18766
- const hasActiveRules = computed(() =>
18769
+ const canDebounceValidate = computed(() => (
18767
18770
  props.disable !== true
18768
18771
  && hasRules.value === true
18769
- );
18772
+ // Should not have a validation in progress already;
18773
+ // It might mean that focus switched to submit btn and
18774
+ // QForm's submit() has been called already (ENTER key)
18775
+ && innerLoading.value === false
18776
+ ));
18770
18777
 
18771
18778
  const hasError = computed(() =>
18772
18779
  props.error === true || innerError.value === true
@@ -18779,15 +18786,29 @@ function useValidate (focused, innerLoading) {
18779
18786
  ));
18780
18787
 
18781
18788
  watch(() => props.modelValue, () => {
18782
- validateIfNeeded();
18789
+ isDirtyModel.value = true;
18790
+
18791
+ if (
18792
+ canDebounceValidate.value === true
18793
+ // trigger validation if not using any kind of lazy-rules
18794
+ && props.lazyRules === false
18795
+ ) {
18796
+ debouncedValidate();
18797
+ }
18783
18798
  });
18784
18799
 
18785
18800
  watch(() => props.reactiveRules, val => {
18786
18801
  if (val === true) {
18787
18802
  if (unwatchRules === void 0) {
18788
18803
  unwatchRules = watch(() => props.rules, () => {
18789
- validateIfNeeded(true);
18790
- });
18804
+ if (
18805
+ canDebounceValidate.value === true
18806
+ && isDirtyModel.value === true
18807
+ && props.lazyRules !== 'ondemand'
18808
+ ) {
18809
+ debouncedValidate();
18810
+ }
18811
+ }, { immediate: true });
18791
18812
  }
18792
18813
  }
18793
18814
  else if (unwatchRules !== void 0) {
@@ -18796,25 +18817,32 @@ function useValidate (focused, innerLoading) {
18796
18817
  }
18797
18818
  }, { immediate: true });
18798
18819
 
18820
+ watch(() => props.lazyRules, val => {
18821
+ if (
18822
+ val === false
18823
+ && canDebounceValidate.value === true
18824
+ && isDirtyModel.value === true
18825
+ ) {
18826
+ debouncedValidate();
18827
+ }
18828
+ });
18829
+
18799
18830
  watch(focused, val => {
18800
18831
  if (val === true) {
18801
18832
  if (isDirtyModel.value === null) {
18802
- isDirtyModel.value = false;
18833
+ isDirtyModel.value = props.lazyRules === true;
18803
18834
  }
18804
18835
  }
18805
- else if (isDirtyModel.value === false) {
18806
- isDirtyModel.value = true;
18807
-
18808
- if (
18809
- hasActiveRules.value === true
18810
- && props.lazyRules !== 'ondemand'
18811
- // Don't re-trigger if it's already in progress;
18812
- // It might mean that focus switched to submit btn and
18813
- // QForm's submit() has been called already (ENTER key)
18814
- && innerLoading.value === false
18815
- ) {
18816
- debouncedValidate();
18817
- }
18836
+ else if (
18837
+ 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
+ )
18844
+ ) {
18845
+ debouncedValidate();
18818
18846
  }
18819
18847
  });
18820
18848
 
@@ -18834,7 +18862,10 @@ function useValidate (focused, innerLoading) {
18834
18862
  * - Promise (pending async validation)
18835
18863
  */
18836
18864
  function validate (val = props.modelValue) {
18837
- if (hasActiveRules.value !== true) {
18865
+ if (
18866
+ props.disable === true
18867
+ || hasRules.value === false
18868
+ ) {
18838
18869
  return true
18839
18870
  }
18840
18871
 
@@ -18903,16 +18934,6 @@ function useValidate (focused, innerLoading) {
18903
18934
  )
18904
18935
  }
18905
18936
 
18906
- function validateIfNeeded (changedRules) {
18907
- if (
18908
- hasActiveRules.value === true
18909
- && props.lazyRules !== 'ondemand'
18910
- && (isDirtyModel.value === true || (props.lazyRules !== true && changedRules !== true))
18911
- ) {
18912
- debouncedValidate();
18913
- }
18914
- }
18915
-
18916
18937
  const debouncedValidate = debounce(validate, 0);
18917
18938
 
18918
18939
  onBeforeUnmount(() => {
@@ -19180,9 +19201,6 @@ function useField (state) {
19180
19201
  if (props.disable === true) {
19181
19202
  acc[ 'aria-disabled' ] = 'true';
19182
19203
  }
19183
- else if (props.readonly === true) {
19184
- acc[ 'aria-readonly' ] = 'true';
19185
- }
19186
19204
 
19187
19205
  return acc
19188
19206
  });
@@ -25616,15 +25634,15 @@ var QRange = createComponent({
25616
25634
  case dragType.RANGE:
25617
25635
  const
25618
25636
  ratioDelta = ratio - dragging.offsetRatio,
25619
- minR = between(dragging.ratioMin + ratioDelta, 0, 1 - dragging.rangeRatio),
25637
+ minR = between(dragging.ratioMin + ratioDelta, state.innerMinRatio.value, state.innerMaxRatio.value - dragging.rangeRatio),
25620
25638
  modelDelta = localModel - dragging.offsetModel,
25621
- min = between(dragging.valueMin + modelDelta, props.min, props.max - dragging.rangeValue);
25639
+ min = between(dragging.valueMin + modelDelta, state.innerMin.value, state.innerMax.value - dragging.rangeValue);
25622
25640
 
25623
25641
  pos = {
25624
25642
  minR,
25625
25643
  maxR: minR + dragging.rangeRatio,
25626
- min: parseFloat(min.toFixed(state.decimals.value)),
25627
- max: parseFloat((min + dragging.rangeValue).toFixed(state.decimals.value))
25644
+ min: state.roundValueFn.value(min),
25645
+ max: state.roundValueFn.value(min + dragging.rangeValue)
25628
25646
  };
25629
25647
 
25630
25648
  state.focus.value = 'both';
@@ -25654,7 +25672,7 @@ var QRange = createComponent({
25654
25672
  stopAndPrevent(evt);
25655
25673
 
25656
25674
  const
25657
- stepVal = ([ 34, 33 ].includes(evt.keyCode) ? 10 : 1) * state.step.value,
25675
+ stepVal = ([ 34, 33 ].includes(evt.keyCode) ? 10 : 1) * state.keyStep.value,
25658
25676
  offset = (
25659
25677
  ([ 34, 37, 40 ].includes(evt.keyCode) ? -1 : 1)
25660
25678
  * (state.isReversed.value === true ? -1 : 1)
@@ -25664,14 +25682,14 @@ var QRange = createComponent({
25664
25682
  if (state.focus.value === 'both') {
25665
25683
  const interval = model.value.max - model.value.min;
25666
25684
  const min = between(
25667
- parseFloat((model.value.min + offset).toFixed(state.decimals.value)),
25685
+ state.roundValueFn.value(model.value.min + offset),
25668
25686
  state.innerMin.value,
25669
25687
  state.innerMax.value - interval
25670
25688
  );
25671
25689
 
25672
25690
  model.value = {
25673
25691
  min,
25674
- max: parseFloat((min + interval).toFixed(state.decimals.value))
25692
+ max: state.roundValueFn.value(min + interval)
25675
25693
  };
25676
25694
  }
25677
25695
  else if (state.focus.value === false) {
@@ -25683,7 +25701,7 @@ var QRange = createComponent({
25683
25701
  model.value = {
25684
25702
  ...model.value,
25685
25703
  [ which ]: between(
25686
- parseFloat((model.value[ which ] + offset).toFixed(state.decimals.value)),
25704
+ state.roundValueFn.value(model.value[ which ] + offset),
25687
25705
  which === 'min' ? state.innerMin.value : model.value.min,
25688
25706
  which === 'max' ? state.innerMax.value : model.value.max
25689
25707
  )
@@ -39685,6 +39703,7 @@ const notificationsList = {};
39685
39703
  const positionClass = {};
39686
39704
  const emptyRE = /^\s*$/;
39687
39705
  const notifRefs = [];
39706
+ const invalidTimeoutValues = [ void 0, null, true, false, '' ];
39688
39707
 
39689
39708
  const positionList = [
39690
39709
  'top-left', 'top-right',
@@ -39778,15 +39797,15 @@ function addNotification (config, $q, originalApi) {
39778
39797
  notif.position = 'bottom';
39779
39798
  }
39780
39799
 
39781
- if (notif.timeout === void 0) {
39800
+ if (invalidTimeoutValues.includes(notif.timeout) === true) {
39782
39801
  notif.timeout = 5000;
39783
39802
  }
39784
39803
  else {
39785
- const t = parseInt(notif.timeout, 10);
39804
+ const t = Number(notif.timeout); // we catch exponential notation too with Number() casting
39786
39805
  if (isNaN(t) || t < 0) {
39787
39806
  return logError('wrong timeout', config)
39788
39807
  }
39789
- notif.timeout = t;
39808
+ notif.timeout = Number.isFinite(t) ? t : 0;
39790
39809
  }
39791
39810
 
39792
39811
  if (notif.timeout === 0) {
@@ -40854,7 +40873,7 @@ function runSequentialPromises (
40854
40873
  */
40855
40874
 
40856
40875
  const Quasar = {
40857
- version: '2.14.1',
40876
+ version: '2.14.2',
40858
40877
  install: installQuasar,
40859
40878
  lang: Plugin$8,
40860
40879
  iconSet: Plugin$7