quasar 2.11.10 → 2.12.0

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 (156) hide show
  1. package/dist/api/QDrawer.json +11 -5
  2. package/dist/api/QIntersection.json +4 -0
  3. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  4. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  5. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  6. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  7. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  8. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  9. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  10. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  11. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  12. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  13. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  14. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  15. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  16. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  17. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  18. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  19. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  20. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  21. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  22. package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
  23. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  24. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  25. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  26. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
  40. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  41. package/dist/icon-set/themify.umd.prod.js +1 -1
  42. package/dist/lang/ar-TN.umd.prod.js +1 -1
  43. package/dist/lang/ar.umd.prod.js +1 -1
  44. package/dist/lang/az-Latn.umd.prod.js +1 -1
  45. package/dist/lang/bg.umd.prod.js +1 -1
  46. package/dist/lang/bn.umd.prod.js +1 -1
  47. package/dist/lang/ca.umd.prod.js +1 -1
  48. package/dist/lang/cs.umd.prod.js +1 -1
  49. package/dist/lang/da.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/hr.umd.prod.js +1 -1
  65. package/dist/lang/hu.umd.prod.js +1 -1
  66. package/dist/lang/id.umd.prod.js +1 -1
  67. package/dist/lang/is.umd.prod.js +1 -1
  68. package/dist/lang/it.umd.prod.js +1 -1
  69. package/dist/lang/ja.umd.prod.js +1 -1
  70. package/dist/lang/kk.umd.prod.js +1 -1
  71. package/dist/lang/km.umd.prod.js +1 -1
  72. package/dist/lang/ko-KR.umd.prod.js +1 -1
  73. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  74. package/dist/lang/lt.umd.prod.js +1 -1
  75. package/dist/lang/lu.umd.prod.js +1 -1
  76. package/dist/lang/lv.umd.prod.js +1 -1
  77. package/dist/lang/mk.umd.prod.js +6 -0
  78. package/dist/lang/ml.umd.prod.js +1 -1
  79. package/dist/lang/mm.umd.prod.js +1 -1
  80. package/dist/lang/ms.umd.prod.js +1 -1
  81. package/dist/lang/my.umd.prod.js +1 -1
  82. package/dist/lang/nb-NO.umd.prod.js +1 -1
  83. package/dist/lang/nl.umd.prod.js +1 -1
  84. package/dist/lang/pl.umd.prod.js +1 -1
  85. package/dist/lang/pt-BR.umd.prod.js +1 -1
  86. package/dist/lang/pt.umd.prod.js +1 -1
  87. package/dist/lang/ro.umd.prod.js +1 -1
  88. package/dist/lang/ru.umd.prod.js +1 -1
  89. package/dist/lang/sk.umd.prod.js +1 -1
  90. package/dist/lang/sl.umd.prod.js +1 -1
  91. package/dist/lang/sm.umd.prod.js +1 -1
  92. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  93. package/dist/lang/sr.umd.prod.js +1 -1
  94. package/dist/lang/sv.umd.prod.js +1 -1
  95. package/dist/lang/ta.umd.prod.js +1 -1
  96. package/dist/lang/th.umd.prod.js +1 -1
  97. package/dist/lang/tr.umd.prod.js +1 -1
  98. package/dist/lang/ug.umd.prod.js +1 -1
  99. package/dist/lang/uk.umd.prod.js +1 -1
  100. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  101. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  102. package/dist/lang/vi.umd.prod.js +1 -1
  103. package/dist/lang/zh-CN.umd.prod.js +1 -1
  104. package/dist/lang/zh-TW.umd.prod.js +1 -1
  105. package/dist/quasar.cjs.prod.js +2 -2
  106. package/dist/quasar.esm.js +109 -86
  107. package/dist/quasar.esm.prod.js +2 -2
  108. package/dist/quasar.sass +1 -1
  109. package/dist/quasar.umd.js +109 -86
  110. package/dist/quasar.umd.prod.js +2 -2
  111. package/dist/types/index.d.ts +13 -4
  112. package/dist/types/utils.d.ts +21 -5
  113. package/dist/vetur/quasar-attributes.json +8 -4
  114. package/dist/vetur/quasar-tags.json +2 -1
  115. package/dist/web-types/web-types.json +20 -5
  116. package/lang/index.json +4 -0
  117. package/lang/mk.js +98 -0
  118. package/lang/mk.mjs +93 -0
  119. package/package.json +1 -1
  120. package/src/components/btn-group/QBtnGroup.js +1 -1
  121. package/src/components/color/QColor.js +1 -1
  122. package/src/components/date/QDate.js +2 -2
  123. package/src/components/drawer/QDrawer.js +2 -0
  124. package/src/components/drawer/QDrawer.json +11 -4
  125. package/src/components/editor/QEditor.js +1 -1
  126. package/src/components/editor/editor-caret.js +1 -1
  127. package/src/components/file/QFile.js +2 -2
  128. package/src/components/input/QInput.js +1 -1
  129. package/src/components/input/use-mask.js +4 -4
  130. package/src/components/intersection/QIntersection.js +7 -3
  131. package/src/components/intersection/QIntersection.json +5 -0
  132. package/src/components/rating/QRating.js +1 -1
  133. package/src/components/select/QSelect.js +10 -10
  134. package/src/components/table/QTable.js +1 -1
  135. package/src/components/table/table-pagination.js +1 -1
  136. package/src/components/table/table-row-selection.js +1 -1
  137. package/src/components/time/QTime.js +2 -2
  138. package/src/components/tree/QTree.js +10 -11
  139. package/src/components/uploader/__tests__/QUploader.cy.js +2 -2
  140. package/src/components/uploader/uploader-core.js +5 -5
  141. package/src/components/uploader/xhr-uploader-plugin.js +2 -2
  142. package/src/composables/private/use-field.js +2 -2
  143. package/src/composables/private/use-file.js +4 -4
  144. package/src/composables/private/use-panel.js +1 -1
  145. package/src/composables/private/use-validate.js +2 -2
  146. package/src/directives/Morph.js +1 -1
  147. package/src/directives/TouchHold.js +1 -1
  148. package/src/directives/TouchRepeat.js +1 -1
  149. package/src/directives/TouchSwipe.js +7 -0
  150. package/src/lang.js +1 -1
  151. package/src/plugins/Meta.js +5 -5
  152. package/src/plugins/Screen.js +1 -1
  153. package/src/utils/EventBus.js +17 -13
  154. package/src/utils/morph.js +2 -2
  155. package/src/utils/private/focus-manager.js +1 -1
  156. package/src/utils/private/touch.js +9 -1
package/dist/quasar.sass CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.11.10
2
+ * Quasar Framework v2.12.0
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.11.10
2
+ * Quasar Framework v2.12.0
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -740,7 +740,7 @@
740
740
 
741
741
  this.setDebounce(updateDebounce);
742
742
 
743
- if (Object.keys(updateSizes).length > 0) {
743
+ if (Object.keys(updateSizes).length !== 0) {
744
744
  this.setSizes(updateSizes);
745
745
  updateSizes = void 0; // free up memory
746
746
  }
@@ -1044,7 +1044,7 @@
1044
1044
 
1045
1045
  function getLocale () {
1046
1046
 
1047
- const val = Array.isArray(navigator.languages) === true && navigator.languages.length > 0
1047
+ const val = Array.isArray(navigator.languages) === true && navigator.languages.length !== 0
1048
1048
  ? navigator.languages[ 0 ]
1049
1049
  : navigator.language;
1050
1050
 
@@ -1653,7 +1653,7 @@
1653
1653
  }
1654
1654
 
1655
1655
  var installQuasar = function (parentApp, opts = {}) {
1656
- const $q = { version: '2.11.10' };
1656
+ const $q = { version: '2.12.0' };
1657
1657
 
1658
1658
  if (globalConfigIsFrozen === false) {
1659
1659
  if (opts.config !== void 0) {
@@ -3952,7 +3952,7 @@
3952
3952
  .filter(t => props[ t ] === true)
3953
3953
  .map(t => `q-btn-group--${ t }`).join(' ');
3954
3954
 
3955
- return `q-btn-group row no-wrap${ cls.length > 0 ? ' ' + cls : '' }`
3955
+ return `q-btn-group row no-wrap${ cls.length !== 0 ? ' ' + cls : '' }`
3956
3956
  + (props.spread === true ? ' q-btn-group--spread' : ' inline')
3957
3957
  });
3958
3958
 
@@ -4399,7 +4399,7 @@
4399
4399
  function removeFocusWaitFlag (flag) {
4400
4400
  clearFlag(flag);
4401
4401
 
4402
- if (waitFlags.length === 0 && queue.length > 0) {
4402
+ if (waitFlags.length === 0 && queue.length !== 0) {
4403
4403
  // only call last focus handler (can't focus multiple things at once)
4404
4404
  queue[ queue.length - 1 ]();
4405
4405
  queue = [];
@@ -6361,12 +6361,19 @@
6361
6361
  return dir
6362
6362
  }
6363
6363
 
6364
+ // This is especially important (not the main reason, but important)
6365
+ // for TouchSwipe directive running on Firefox
6366
+ // because text selection on such elements cannot be determined
6367
+ // without additional work (on top of getSelection() API)
6368
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=85686
6369
+ const avoidNodeNamesList = [ 'INPUT', 'TEXTAREA' ];
6370
+
6364
6371
  function shouldStart (evt, ctx) {
6365
6372
  return ctx.event === void 0
6366
6373
  && evt.target !== void 0
6367
6374
  && evt.target.draggable !== true
6368
6375
  && typeof ctx.handler === 'function'
6369
- && evt.target.nodeName.toUpperCase() !== 'INPUT'
6376
+ && avoidNodeNamesList.includes(evt.target.nodeName.toUpperCase()) === false
6370
6377
  && (evt.qClonedBy === void 0 || evt.qClonedBy.indexOf(ctx.uid) === -1)
6371
6378
  }
6372
6379
 
@@ -6469,6 +6476,13 @@
6469
6476
  return
6470
6477
  }
6471
6478
  }
6479
+ // is user trying to select text?
6480
+ // if so, then something should be reported here
6481
+ // (previous selection, if any, was discarded when swipe started)
6482
+ else if (window.getSelection().toString() !== '') {
6483
+ ctx.end(evt);
6484
+ return
6485
+ }
6472
6486
  else if (absX < ctx.sensitivity[ 2 ] && absY < ctx.sensitivity[ 2 ]) {
6473
6487
  return
6474
6488
  }
@@ -6829,7 +6843,7 @@
6829
6843
  index += direction;
6830
6844
  }
6831
6845
 
6832
- if (props.infinite === true && panels.length > 0 && startIndex !== -1 && startIndex !== panels.length) {
6846
+ if (props.infinite === true && panels.length !== 0 && startIndex !== -1 && startIndex !== panels.length) {
6833
6847
  goToPanelByOffset(direction, direction === -1 ? panels.length : -1);
6834
6848
  }
6835
6849
  }
@@ -11103,7 +11117,7 @@
11103
11117
  }));
11104
11118
 
11105
11119
  const computedPalette = vue.computed(() => (
11106
- props.palette !== void 0 && props.palette.length > 0
11120
+ props.palette !== void 0 && props.palette.length !== 0
11107
11121
  ? props.palette
11108
11122
  : palette
11109
11123
  ));
@@ -13351,7 +13365,7 @@
13351
13365
  );
13352
13366
 
13353
13367
  const headerTitle = vue.computed(() => {
13354
- if (props.title !== void 0 && props.title !== null && props.title.length > 0) {
13368
+ if (props.title !== void 0 && props.title !== null && props.title.length !== 0) {
13355
13369
  return props.title
13356
13370
  }
13357
13371
 
@@ -13403,7 +13417,7 @@
13403
13417
  });
13404
13418
 
13405
13419
  const headerSubtitle = vue.computed(() => {
13406
- if (props.subtitle !== void 0 && props.subtitle !== null && props.subtitle.length > 0) {
13420
+ if (props.subtitle !== void 0 && props.subtitle !== null && props.subtitle.length !== 0) {
13407
13421
  return props.subtitle
13408
13422
  }
13409
13423
 
@@ -15277,6 +15291,7 @@
15277
15291
  type: Number,
15278
15292
  default: 57
15279
15293
  },
15294
+ noMiniAnimation: Boolean,
15280
15295
 
15281
15296
  breakpoint: {
15282
15297
  type: Number,
@@ -15653,6 +15668,7 @@
15653
15668
  vue.watch(() => $q.lang.rtl, () => { applyPosition(); });
15654
15669
 
15655
15670
  vue.watch(() => props.mini, () => {
15671
+ if (props.noMiniAnimation) return
15656
15672
  if (props.modelValue === true) {
15657
15673
  animateMini();
15658
15674
  $layout.animate();
@@ -16029,7 +16045,7 @@
16029
16045
 
16030
16046
  get hasSelection () {
16031
16047
  return this.selection !== null
16032
- ? this.selection.toString().length > 0
16048
+ ? this.selection.toString().length !== 0
16033
16049
  : false
16034
16050
  }
16035
16051
 
@@ -17416,7 +17432,7 @@
17416
17432
  emit(`link-${ v ? 'Show' : 'Hide' }`);
17417
17433
  });
17418
17434
 
17419
- const hasToolbar = vue.computed(() => props.toolbar && props.toolbar.length > 0);
17435
+ const hasToolbar = vue.computed(() => props.toolbar && props.toolbar.length !== 0);
17420
17436
 
17421
17437
  const keys = vue.computed(() => {
17422
17438
  const
@@ -18692,7 +18708,7 @@
18692
18708
  const hasRules = vue.computed(() =>
18693
18709
  props.rules !== void 0
18694
18710
  && props.rules !== null
18695
- && props.rules.length > 0
18711
+ && props.rules.length !== 0
18696
18712
  );
18697
18713
 
18698
18714
  const hasActiveRules = vue.computed(() =>
@@ -18705,7 +18721,7 @@
18705
18721
  );
18706
18722
 
18707
18723
  const errorMessage = vue.computed(() => (
18708
- typeof props.errorMessage === 'string' && props.errorMessage.length > 0
18724
+ typeof props.errorMessage === 'string' && props.errorMessage.length !== 0
18709
18725
  ? props.errorMessage
18710
18726
  : innerErrorMessage.value
18711
18727
  ));
@@ -18874,7 +18890,7 @@
18874
18890
  function fieldValueIsFilled (val) {
18875
18891
  return val !== void 0
18876
18892
  && val !== null
18877
- && ('' + val).length > 0
18893
+ && ('' + val).length !== 0
18878
18894
  }
18879
18895
 
18880
18896
  const useFieldProps = {
@@ -19070,7 +19086,7 @@
19070
19086
  hasError.value === true
19071
19087
  ? ' text-negative'
19072
19088
  : (
19073
- typeof props.standout === 'string' && props.standout.length > 0 && state.focused.value === true
19089
+ typeof props.standout === 'string' && props.standout.length !== 0 && state.focused.value === true
19074
19090
  ? ` ${ props.standout }`
19075
19091
  : (props.color !== void 0 ? ` text-${ props.color }` : '')
19076
19092
  )
@@ -19564,7 +19580,7 @@
19564
19580
  const rejectedFiles = [];
19565
19581
 
19566
19582
  const done = () => {
19567
- if (rejectedFiles.length > 0) {
19583
+ if (rejectedFiles.length !== 0) {
19568
19584
  emit('rejected', rejectedFiles);
19569
19585
  }
19570
19586
  };
@@ -19594,7 +19610,7 @@
19594
19610
  // Cordova/iOS allows selecting multiple files even when the
19595
19611
  // multiple attribute is not specified. We also normalize drag'n'dropped
19596
19612
  // files here:
19597
- if (props.multiple !== true && files.length > 0) {
19613
+ if (props.multiple !== true && files.length !== 0) {
19598
19614
  files = [ files[ 0 ] ];
19599
19615
  }
19600
19616
 
@@ -19649,7 +19665,7 @@
19649
19665
 
19650
19666
  done();
19651
19667
 
19652
- if (files.length > 0) {
19668
+ if (files.length !== 0) {
19653
19669
  return files
19654
19670
  }
19655
19671
  }
@@ -19675,7 +19691,7 @@
19675
19691
  stopAndPreventDrag(e);
19676
19692
  const files = e.dataTransfer.files;
19677
19693
 
19678
- if (files.length > 0) {
19694
+ if (files.length !== 0) {
19679
19695
  addFilesToQueue(null, files);
19680
19696
  }
19681
19697
 
@@ -19860,7 +19876,7 @@
19860
19876
  }
19861
19877
 
19862
19878
  function removeFile (file) {
19863
- const index = innerValue.value.findIndex(file);
19879
+ const index = innerValue.value.indexOf(file);
19864
19880
  if (index > -1) {
19865
19881
  removeAtIndex(index);
19866
19882
  }
@@ -19958,7 +19974,7 @@
19958
19974
  ? props.displayValue
19959
19975
  : selectedString.value;
19960
19976
 
19961
- return textContent.length > 0
19977
+ return textContent.length !== 0
19962
19978
  ? [
19963
19979
  vue.h('div', {
19964
19980
  class: props.inputClass,
@@ -21369,7 +21385,7 @@
21369
21385
 
21370
21386
  function updateMaskInternals () {
21371
21387
  hasMask.value = props.mask !== void 0
21372
- && props.mask.length > 0
21388
+ && props.mask.length !== 0
21373
21389
  && getIsTypeText();
21374
21390
 
21375
21391
  if (hasMask.value === false) {
@@ -21383,7 +21399,7 @@
21383
21399
  localComputedMask = NAMED_MASKS[ props.mask ] === void 0
21384
21400
  ? props.mask
21385
21401
  : NAMED_MASKS[ props.mask ],
21386
- fillChar = typeof props.fillMask === 'string' && props.fillMask.length > 0
21402
+ fillChar = typeof props.fillMask === 'string' && props.fillMask.length !== 0
21387
21403
  ? props.fillMask.slice(0, 1)
21388
21404
  : '_',
21389
21405
  fillCharEscaped = fillChar.replace(escRegex, '\\$&'),
@@ -21464,7 +21480,7 @@
21464
21480
  str = str.slice(m.shift().length);
21465
21481
  extractMatch.push(...m);
21466
21482
  }
21467
- if (extractMatch.length > 0) {
21483
+ if (extractMatch.length !== 0) {
21468
21484
  return extractMatch.join('')
21469
21485
  }
21470
21486
 
@@ -21812,7 +21828,7 @@
21812
21828
  return val
21813
21829
  }
21814
21830
 
21815
- return props.reverseFillMask === true && val.length > 0
21831
+ return props.reverseFillMask === true && val.length !== 0
21816
21832
  ? maskReplaced.slice(0, -val.length) + val
21817
21833
  : val + maskReplaced.slice(val.length)
21818
21834
  }
@@ -22241,7 +22257,7 @@
22241
22257
  hasShadow: vue.computed(() =>
22242
22258
  props.type !== 'file'
22243
22259
  && typeof props.shadowText === 'string'
22244
- && props.shadowText.length > 0
22260
+ && props.shadowText.length !== 0
22245
22261
  ),
22246
22262
 
22247
22263
  inputRef,
@@ -22461,9 +22477,13 @@
22461
22477
  }
22462
22478
 
22463
22479
  function getContent () {
22464
- return showing.value === true
22465
- ? [ vue.h('div', { key: 'content', style: transitionStyle.value }, hSlot(slots.default)) ]
22466
- : void 0
22480
+ if (showing.value === true) {
22481
+ return [ vue.h('div', { key: 'content', style: transitionStyle.value }, hSlot(slots.default)) ]
22482
+ }
22483
+
22484
+ if (slots.hidden !== void 0) {
22485
+ return [ vue.h('div', { key: 'hidden', style: transitionStyle.value }, slots.hidden()) ]
22486
+ }
22467
22487
  }
22468
22488
 
22469
22489
  return () => {
@@ -25700,7 +25720,7 @@
25700
25720
 
25701
25721
  const iconLabel = vue.computed(() => {
25702
25722
  if (typeof props.iconAriaLabel === 'string') {
25703
- const label = props.iconAriaLabel.length > 0 ? `${ props.iconAriaLabel } ` : '';
25723
+ const label = props.iconAriaLabel.length !== 0 ? `${ props.iconAriaLabel } ` : '';
25704
25724
  return i => `${ label }${ i }`
25705
25725
  }
25706
25726
 
@@ -27750,7 +27770,7 @@
27750
27770
 
27751
27771
  resetInputValue();
27752
27772
 
27753
- if (typeof value === 'string' && value.length > 0) {
27773
+ if (typeof value === 'string' && value.length !== 0) {
27754
27774
  const needle = value.toLocaleLowerCase();
27755
27775
  const findFn = extractFn => {
27756
27776
  const option = props.options.find(opt => extractFn.value(opt).toLocaleLowerCase() === needle);
@@ -27797,7 +27817,7 @@
27797
27817
  return
27798
27818
  }
27799
27819
 
27800
- const newValueModeValid = inputValue.value.length > 0
27820
+ const newValueModeValid = inputValue.value.length !== 0
27801
27821
  && (props.newValueMode !== void 0 || props.onNewValue !== void 0);
27802
27822
 
27803
27823
  const tabShouldSelect = e.shiftKey !== true
@@ -27892,7 +27912,7 @@
27892
27912
  && e.altKey === false // not kbd shortcut
27893
27913
  && e.ctrlKey === false // not kbd shortcut
27894
27914
  && e.metaKey === false // not kbd shortcut, especially on macOS with Command key
27895
- && (e.keyCode !== 32 || searchBuffer.length > 0) // space in middle of search
27915
+ && (e.keyCode !== 32 || searchBuffer.length !== 0) // space in middle of search
27896
27916
  ) {
27897
27917
  menu.value !== true && showPopup(e);
27898
27918
 
@@ -28179,7 +28199,7 @@
28179
28199
  if (
28180
28200
  val !== ''
28181
28201
  && props.multiple !== true
28182
- && innerValue.value.length > 0
28202
+ && innerValue.value.length !== 0
28183
28203
  && userInputValue !== true
28184
28204
  && val === getOptionLabel.value(innerValue.value[ 0 ])
28185
28205
  ) {
@@ -28298,7 +28318,7 @@
28298
28318
  loading: innerLoadingIndicator.value,
28299
28319
  itemAligned: false,
28300
28320
  filled: true,
28301
- stackLabel: inputValue.value.length > 0,
28321
+ stackLabel: inputValue.value.length !== 0,
28302
28322
  ...state.splitAttrs.listeners.value,
28303
28323
  onFocus: onDialogFieldFocus,
28304
28324
  onBlur: onDialogFieldBlur
@@ -28426,7 +28446,7 @@
28426
28446
 
28427
28447
  function resetInputValue () {
28428
28448
  props.useInput === true && updateInputValue(
28429
- props.multiple !== true && props.fillInput === true && innerValue.value.length > 0
28449
+ props.multiple !== true && props.fillInput === true && innerValue.value.length !== 0
28430
28450
  ? getOptionLabel.value(innerValue.value[ 0 ]) || ''
28431
28451
  : '',
28432
28452
  true,
@@ -28438,7 +28458,7 @@
28438
28458
  let optionIndex = -1;
28439
28459
 
28440
28460
  if (show === true) {
28441
- if (innerValue.value.length > 0) {
28461
+ if (innerValue.value.length !== 0) {
28442
28462
  const val = getOptionValue.value(innerValue.value[ 0 ]);
28443
28463
  optionIndex = props.options.findIndex(v => isDeepEqual(getOptionValue.value(v), val));
28444
28464
  }
@@ -28540,7 +28560,7 @@
28540
28560
  floatingLabel: vue.computed(() =>
28541
28561
  (props.hideSelected !== true && hasValue.value === true)
28542
28562
  || typeof inputValue.value === 'number'
28543
- || inputValue.value.length > 0
28563
+ || inputValue.value.length !== 0
28544
28564
  || fieldValueIsFilled(props.displayValue)
28545
28565
  ),
28546
28566
 
@@ -28609,7 +28629,7 @@
28609
28629
  })
28610
28630
  );
28611
28631
 
28612
- if (isTarget === true && typeof props.autocomplete === 'string' && props.autocomplete.length > 0) {
28632
+ if (isTarget === true && typeof props.autocomplete === 'string' && props.autocomplete.length !== 0) {
28613
28633
  child.push(
28614
28634
  vue.h('input', {
28615
28635
  class: 'q-select__autocomplete-input',
@@ -28621,7 +28641,7 @@
28621
28641
  }
28622
28642
  }
28623
28643
 
28624
- if (nameProp.value !== void 0 && props.disable !== true && innerOptionsValue.value.length > 0) {
28644
+ if (nameProp.value !== void 0 && props.disable !== true && innerOptionsValue.value.length !== 0) {
28625
28645
  const opts = innerOptionsValue.value.map(value => vue.h('option', { value, selected: true }));
28626
28646
 
28627
28647
  child.push(
@@ -31982,7 +32002,7 @@
31982
32002
  sortBy: null,
31983
32003
  descending: false,
31984
32004
  page: 1,
31985
- rowsPerPage: props.rowsPerPageOptions.length > 0
32005
+ rowsPerPage: props.rowsPerPageOptions.length !== 0
31986
32006
  ? props.rowsPerPageOptions[ 0 ]
31987
32007
  : 5
31988
32008
  }, props.pagination)
@@ -32193,7 +32213,7 @@
32193
32213
  });
32194
32214
 
32195
32215
  const allRowsSelected = vue.computed(() =>
32196
- computedRows.value.length > 0 && computedRows.value.every(
32216
+ computedRows.value.length !== 0 && computedRows.value.every(
32197
32217
  row => selectedKeys.value[ getRowKey.value(row) ] === true
32198
32218
  )
32199
32219
  );
@@ -33134,7 +33154,7 @@
33134
33154
  }, getPaginationDiv(child))
33135
33155
  }
33136
33156
 
33137
- if (child.length > 0) {
33157
+ if (child.length !== 0) {
33138
33158
  return vue.h('div', { class: bottomClass }, child)
33139
33159
  }
33140
33160
  }
@@ -33955,9 +33975,9 @@
33955
33975
  const am = computedFormat24h.value !== true
33956
33976
  ? isAM.value === true
33957
33977
  : (
33958
- validHours.value.am.values.length > 0 && validHours.value.pm.values.length > 0
33978
+ validHours.value.am.values.length !== 0 && validHours.value.pm.values.length !== 0
33959
33979
  ? distance >= clockRect.dist
33960
- : validHours.value.am.values.length > 0
33980
+ : validHours.value.am.values.length !== 0
33961
33981
  );
33962
33982
 
33963
33983
  val = getNormalizedClockValue(
@@ -34710,7 +34730,7 @@
34710
34730
  const tickStrategy = node.tickStrategy || (parent ? parent.tickStrategy : props.tickStrategy);
34711
34731
  const
34712
34732
  key = node[ props.nodeKey ],
34713
- isParent = node[ props.childrenKey ] && node[ props.childrenKey ].length > 0,
34733
+ isParent = node[ props.childrenKey ] && node[ props.childrenKey ].length !== 0,
34714
34734
  selectable = node.disabled !== true && hasSelection.value === true && node.selectable !== false,
34715
34735
  expandable = node.disabled !== true && node.expandable !== false,
34716
34736
  hasTicking = tickStrategy !== 'none',
@@ -34868,16 +34888,15 @@
34868
34888
  }
34869
34889
 
34870
34890
  function expandAll () {
34871
- const
34872
- expanded = innerExpanded.value,
34873
- travel = node => {
34874
- if (node[ props.childrenKey ] && node[ props.childrenKey ].length > 0) {
34875
- if (node.expandable !== false && node.disabled !== true) {
34876
- expanded.push(node[ props.nodeKey ]);
34877
- node[ props.childrenKey ].forEach(travel);
34878
- }
34891
+ const expanded = [];
34892
+ const travel = node => {
34893
+ if (node[ props.childrenKey ] && node[ props.childrenKey ].length !== 0) {
34894
+ if (node.expandable !== false && node.disabled !== true) {
34895
+ expanded.push(node[ props.nodeKey ]);
34896
+ node[ props.childrenKey ].forEach(travel);
34879
34897
  }
34880
- };
34898
+ }
34899
+ };
34881
34900
 
34882
34901
  props.nodes.forEach(travel);
34883
34902
 
@@ -34952,7 +34971,7 @@
34952
34971
  }
34953
34972
  });
34954
34973
  }
34955
- if (collapse.length > 0) {
34974
+ if (collapse.length !== 0) {
34956
34975
  target = target.filter(k => collapse.includes(k) === false);
34957
34976
  }
34958
34977
  }
@@ -35065,7 +35084,7 @@
35065
35084
  ? getChildren(node[ props.childrenKey ])
35066
35085
  : [];
35067
35086
 
35068
- const isParent = children.length > 0 || (m.lazy && m.lazy !== 'loaded');
35087
+ const isParent = children.length !== 0 || (m.lazy && m.lazy !== 'loaded');
35069
35088
 
35070
35089
  let body = node.body
35071
35090
  ? slots[ `body-${ node.body }` ] || slots[ 'default-body' ]
@@ -35409,7 +35428,7 @@
35409
35428
  editable.value === true
35410
35429
  && state.isBusy.value !== true
35411
35430
  && state.isUploading.value !== true
35412
- && state.queuedFiles.value.length > 0
35431
+ && state.queuedFiles.value.length !== 0
35413
35432
  );
35414
35433
 
35415
35434
  vue.provide(uploaderKey, renderInput);
@@ -35489,7 +35508,7 @@
35489
35508
  return false
35490
35509
  });
35491
35510
 
35492
- if (removed.files.length > 0) {
35511
+ if (removed.files.length !== 0) {
35493
35512
  state.files.value = localFiles;
35494
35513
  cb(removed);
35495
35514
  emit('removed', removed.files);
@@ -35617,8 +35636,8 @@
35617
35636
  vue.h('div', {
35618
35637
  class: 'flex flex-center no-wrap q-gutter-xs'
35619
35638
  }, [
35620
- getBtn(state.queuedFiles.value.length > 0, 'removeQueue', removeQueuedFiles),
35621
- getBtn(state.uploadedFiles.value.length > 0, 'removeUploaded', removeUploadedFiles),
35639
+ getBtn(state.queuedFiles.value.length !== 0, 'removeQueue', removeQueuedFiles),
35640
+ getBtn(state.uploadedFiles.value.length !== 0, 'removeUploaded', removeUploadedFiles),
35622
35641
 
35623
35642
  state.isUploading.value === true
35624
35643
  ? vue.h(QSpinner, { class: 'q-uploader__spinner' })
@@ -35700,7 +35719,7 @@
35700
35719
 
35701
35720
  vue.onBeforeUnmount(() => {
35702
35721
  state.isUploading.value === true && state.abort();
35703
- state.files.value.length > 0 && revokeImgURLs();
35722
+ state.files.value.length !== 0 && revokeImgURLs();
35704
35723
  });
35705
35724
 
35706
35725
  const publicApi = {};
@@ -35835,14 +35854,14 @@
35835
35854
  }));
35836
35855
 
35837
35856
  const isUploading = vue.computed(() => workingThreads.value > 0);
35838
- const isBusy = vue.computed(() => promises.value.length > 0);
35857
+ const isBusy = vue.computed(() => promises.value.length !== 0);
35839
35858
 
35840
35859
  let abortPromises;
35841
35860
 
35842
35861
  function abort () {
35843
35862
  xhrs.value.forEach(x => { x.abort(); });
35844
35863
 
35845
- if (promises.value.length > 0) {
35864
+ if (promises.value.length !== 0) {
35846
35865
  abortPromises = true;
35847
35866
  }
35848
35867
  }
@@ -36452,9 +36471,9 @@
36452
36471
  waitFor: options.waitFor === void 0 ? 0 : options.waitFor,
36453
36472
 
36454
36473
  duration: isNaN(options.duration) === true ? 300 : parseInt(options.duration, 10),
36455
- easing: typeof options.easing === 'string' && options.easing.length > 0 ? options.easing : 'ease-in-out',
36474
+ easing: typeof options.easing === 'string' && options.easing.length !== 0 ? options.easing : 'ease-in-out',
36456
36475
  delay: isNaN(options.delay) === true ? 0 : parseInt(options.delay, 10),
36457
- fill: typeof options.fill === 'string' && options.fill.length > 0 ? options.fill : 'none',
36476
+ fill: typeof options.fill === 'string' && options.fill.length !== 0 ? options.fill : 'none',
36458
36477
 
36459
36478
  resize: options.resize === true,
36460
36479
 
@@ -37370,7 +37389,7 @@
37370
37389
  }
37371
37390
 
37372
37391
  function insertArgs (arg, ctx) {
37373
- const opts = typeof arg === 'string' && arg.length > 0
37392
+ const opts = typeof arg === 'string' && arg.length !== 0
37374
37393
  ? arg.split(':') : [];
37375
37394
 
37376
37395
  ctx.name = opts[ 0 ];
@@ -37783,7 +37802,7 @@
37783
37802
  // duration in ms, touch in pixels, mouse in pixels
37784
37803
  const data = [ 600, 5, 7 ];
37785
37804
 
37786
- if (typeof binding.arg === 'string' && binding.arg.length > 0) {
37805
+ if (typeof binding.arg === 'string' && binding.arg.length !== 0) {
37787
37806
  binding.arg.split(':').forEach((val, index) => {
37788
37807
  const v = parseInt(val, 10);
37789
37808
  v && (data[ index ] = v);
@@ -37878,7 +37897,7 @@
37878
37897
  return
37879
37898
  }
37880
37899
 
37881
- const durations = typeof arg === 'string' && arg.length > 0
37900
+ const durations = typeof arg === 'string' && arg.length !== 0
37882
37901
  ? arg.split(':').map(val => parseInt(val, 10))
37883
37902
  : [ 0, 600, 300 ];
37884
37903
 
@@ -39530,7 +39549,7 @@
39530
39549
  document.title = add.title;
39531
39550
  }
39532
39551
 
39533
- if (Object.keys(remove).length > 0) {
39552
+ if (Object.keys(remove).length !== 0) {
39534
39553
  [ 'meta', 'link', 'script' ].forEach(type => {
39535
39554
  remove[ type ].forEach(name => {
39536
39555
  document.head.querySelector(`${ type }[data-qmeta="${ name }"]`).remove();
@@ -40446,21 +40465,25 @@
40446
40465
 
40447
40466
  off (name, callback) {
40448
40467
  const list = this.__stack[ name ];
40449
- const liveEvents = [];
40450
40468
 
40451
- if (list !== void 0 && callback) {
40452
- list.forEach(entry => {
40453
- if (entry.fn !== callback && entry.fn.__callback !== callback) {
40454
- liveEvents.push(entry);
40455
- }
40456
- });
40469
+ if (list === void 0) {
40470
+ return this // chainable
40471
+ }
40457
40472
 
40458
- if (liveEvents.length !== 0) {
40459
- this.__stack[ name ] = liveEvents;
40460
- }
40461
- else {
40462
- delete this.__stack[ name ];
40463
- }
40473
+ if (callback === void 0) {
40474
+ delete this.__stack[ name ];
40475
+ return this // chainable
40476
+ }
40477
+
40478
+ const liveEvents = list.filter(
40479
+ entry => entry.fn !== callback && entry.fn.__callback !== callback
40480
+ );
40481
+
40482
+ if (liveEvents.length !== 0) {
40483
+ this.__stack[ name ] = liveEvents;
40484
+ }
40485
+ else {
40486
+ delete this.__stack[ name ];
40464
40487
  }
40465
40488
 
40466
40489
  return this // chainable
@@ -40838,7 +40861,7 @@
40838
40861
  */
40839
40862
 
40840
40863
  var index_umd = {
40841
- version: '2.11.10',
40864
+ version: '2.12.0',
40842
40865
  install (app, opts) {
40843
40866
  installQuasar(app, {
40844
40867
  components,