quasar 2.11.9 → 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 (157) 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 +110 -87
  107. package/dist/quasar.esm.prod.js +2 -2
  108. package/dist/quasar.sass +1 -1
  109. package/dist/quasar.umd.js +110 -87
  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/icon/QIcon.js +1 -1
  129. package/src/components/input/QInput.js +1 -1
  130. package/src/components/input/use-mask.js +4 -4
  131. package/src/components/intersection/QIntersection.js +7 -3
  132. package/src/components/intersection/QIntersection.json +5 -0
  133. package/src/components/rating/QRating.js +1 -1
  134. package/src/components/select/QSelect.js +10 -10
  135. package/src/components/table/QTable.js +1 -1
  136. package/src/components/table/table-pagination.js +1 -1
  137. package/src/components/table/table-row-selection.js +1 -1
  138. package/src/components/time/QTime.js +2 -2
  139. package/src/components/tree/QTree.js +10 -11
  140. package/src/components/uploader/__tests__/QUploader.cy.js +2 -2
  141. package/src/components/uploader/uploader-core.js +5 -5
  142. package/src/components/uploader/xhr-uploader-plugin.js +2 -2
  143. package/src/composables/private/use-field.js +2 -2
  144. package/src/composables/private/use-file.js +4 -4
  145. package/src/composables/private/use-panel.js +1 -1
  146. package/src/composables/private/use-validate.js +2 -2
  147. package/src/directives/Morph.js +1 -1
  148. package/src/directives/TouchHold.js +1 -1
  149. package/src/directives/TouchRepeat.js +1 -1
  150. package/src/directives/TouchSwipe.js +7 -0
  151. package/src/lang.js +1 -1
  152. package/src/plugins/Meta.js +5 -5
  153. package/src/plugins/Screen.js +1 -1
  154. package/src/utils/EventBus.js +17 -13
  155. package/src/utils/morph.js +2 -2
  156. package/src/utils/private/focus-manager.js +1 -1
  157. package/src/utils/private/touch.js +9 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.11.9
2
+ * Quasar Framework v2.12.0
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -738,7 +738,7 @@ var Screen = defineReactivePlugin({
738
738
 
739
739
  this.setDebounce(updateDebounce);
740
740
 
741
- if (Object.keys(updateSizes).length > 0) {
741
+ if (Object.keys(updateSizes).length !== 0) {
742
742
  this.setSizes(updateSizes);
743
743
  updateSizes = void 0; // free up memory
744
744
  }
@@ -1042,7 +1042,7 @@ var defaultLang = {
1042
1042
 
1043
1043
  function getLocale () {
1044
1044
 
1045
- const val = Array.isArray(navigator.languages) === true && navigator.languages.length > 0
1045
+ const val = Array.isArray(navigator.languages) === true && navigator.languages.length !== 0
1046
1046
  ? navigator.languages[ 0 ]
1047
1047
  : navigator.language;
1048
1048
 
@@ -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.11.9' };
1654
+ const $q = { version: '2.12.0' };
1655
1655
 
1656
1656
  if (globalConfigIsFrozen === false) {
1657
1657
  if (opts.config !== void 0) {
@@ -2128,7 +2128,7 @@ const mRE = /^[Mm]\s?[-+]?\.?\d/;
2128
2128
  const imgRE = /^img:/;
2129
2129
  const svgUseRE = /^svguse:/;
2130
2130
  const ionRE = /^ion-/;
2131
- const faRE = /^(fa-(solid|regular|light|brands|duotone|thin)|[lf]a[srlbdk]?) /;
2131
+ const faRE = /^(fa-(sharp|solid|regular|light|brands|duotone|thin)|[lf]a[srlbdk]?) /;
2132
2132
 
2133
2133
  var QIcon = createComponent({
2134
2134
  name: 'QIcon',
@@ -3950,7 +3950,7 @@ var QBtnGroup = createComponent({
3950
3950
  .filter(t => props[ t ] === true)
3951
3951
  .map(t => `q-btn-group--${ t }`).join(' ');
3952
3952
 
3953
- return `q-btn-group row no-wrap${ cls.length > 0 ? ' ' + cls : '' }`
3953
+ return `q-btn-group row no-wrap${ cls.length !== 0 ? ' ' + cls : '' }`
3954
3954
  + (props.spread === true ? ' q-btn-group--spread' : ' inline')
3955
3955
  });
3956
3956
 
@@ -4397,7 +4397,7 @@ function addFocusWaitFlag (flag) {
4397
4397
  function removeFocusWaitFlag (flag) {
4398
4398
  clearFlag(flag);
4399
4399
 
4400
- if (waitFlags.length === 0 && queue.length > 0) {
4400
+ if (waitFlags.length === 0 && queue.length !== 0) {
4401
4401
  // only call last focus handler (can't focus multiple things at once)
4402
4402
  queue[ queue.length - 1 ]();
4403
4403
  queue = [];
@@ -6359,12 +6359,19 @@ function getModifierDirections (mod) {
6359
6359
  return dir
6360
6360
  }
6361
6361
 
6362
+ // This is especially important (not the main reason, but important)
6363
+ // for TouchSwipe directive running on Firefox
6364
+ // because text selection on such elements cannot be determined
6365
+ // without additional work (on top of getSelection() API)
6366
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=85686
6367
+ const avoidNodeNamesList = [ 'INPUT', 'TEXTAREA' ];
6368
+
6362
6369
  function shouldStart (evt, ctx) {
6363
6370
  return ctx.event === void 0
6364
6371
  && evt.target !== void 0
6365
6372
  && evt.target.draggable !== true
6366
6373
  && typeof ctx.handler === 'function'
6367
- && evt.target.nodeName.toUpperCase() !== 'INPUT'
6374
+ && avoidNodeNamesList.includes(evt.target.nodeName.toUpperCase()) === false
6368
6375
  && (evt.qClonedBy === void 0 || evt.qClonedBy.indexOf(ctx.uid) === -1)
6369
6376
  }
6370
6377
 
@@ -6467,6 +6474,13 @@ var TouchSwipe = createDirective({
6467
6474
  return
6468
6475
  }
6469
6476
  }
6477
+ // is user trying to select text?
6478
+ // if so, then something should be reported here
6479
+ // (previous selection, if any, was discarded when swipe started)
6480
+ else if (window.getSelection().toString() !== '') {
6481
+ ctx.end(evt);
6482
+ return
6483
+ }
6470
6484
  else if (absX < ctx.sensitivity[ 2 ] && absY < ctx.sensitivity[ 2 ]) {
6471
6485
  return
6472
6486
  }
@@ -6827,7 +6841,7 @@ function usePanel () {
6827
6841
  index += direction;
6828
6842
  }
6829
6843
 
6830
- if (props.infinite === true && panels.length > 0 && startIndex !== -1 && startIndex !== panels.length) {
6844
+ if (props.infinite === true && panels.length !== 0 && startIndex !== -1 && startIndex !== panels.length) {
6831
6845
  goToPanelByOffset(direction, direction === -1 ? panels.length : -1);
6832
6846
  }
6833
6847
  }
@@ -11101,7 +11115,7 @@ var QColor = createComponent({
11101
11115
  }));
11102
11116
 
11103
11117
  const computedPalette = computed(() => (
11104
- props.palette !== void 0 && props.palette.length > 0
11118
+ props.palette !== void 0 && props.palette.length !== 0
11105
11119
  ? props.palette
11106
11120
  : palette
11107
11121
  ));
@@ -13349,7 +13363,7 @@ var QDate = createComponent({
13349
13363
  );
13350
13364
 
13351
13365
  const headerTitle = computed(() => {
13352
- if (props.title !== void 0 && props.title !== null && props.title.length > 0) {
13366
+ if (props.title !== void 0 && props.title !== null && props.title.length !== 0) {
13353
13367
  return props.title
13354
13368
  }
13355
13369
 
@@ -13401,7 +13415,7 @@ var QDate = createComponent({
13401
13415
  });
13402
13416
 
13403
13417
  const headerSubtitle = computed(() => {
13404
- if (props.subtitle !== void 0 && props.subtitle !== null && props.subtitle.length > 0) {
13418
+ if (props.subtitle !== void 0 && props.subtitle !== null && props.subtitle.length !== 0) {
13405
13419
  return props.subtitle
13406
13420
  }
13407
13421
 
@@ -15275,6 +15289,7 @@ var QDrawer = createComponent({
15275
15289
  type: Number,
15276
15290
  default: 57
15277
15291
  },
15292
+ noMiniAnimation: Boolean,
15278
15293
 
15279
15294
  breakpoint: {
15280
15295
  type: Number,
@@ -15651,6 +15666,7 @@ var QDrawer = createComponent({
15651
15666
  watch(() => $q.lang.rtl, () => { applyPosition(); });
15652
15667
 
15653
15668
  watch(() => props.mini, () => {
15669
+ if (props.noMiniAnimation) return
15654
15670
  if (props.modelValue === true) {
15655
15671
  animateMini();
15656
15672
  $layout.animate();
@@ -16027,7 +16043,7 @@ class Caret {
16027
16043
 
16028
16044
  get hasSelection () {
16029
16045
  return this.selection !== null
16030
- ? this.selection.toString().length > 0
16046
+ ? this.selection.toString().length !== 0
16031
16047
  : false
16032
16048
  }
16033
16049
 
@@ -17414,7 +17430,7 @@ var QEditor = createComponent({
17414
17430
  emit(`link-${ v ? 'Show' : 'Hide' }`);
17415
17431
  });
17416
17432
 
17417
- const hasToolbar = computed(() => props.toolbar && props.toolbar.length > 0);
17433
+ const hasToolbar = computed(() => props.toolbar && props.toolbar.length !== 0);
17418
17434
 
17419
17435
  const keys = computed(() => {
17420
17436
  const
@@ -18690,7 +18706,7 @@ function useValidate (focused, innerLoading) {
18690
18706
  const hasRules = computed(() =>
18691
18707
  props.rules !== void 0
18692
18708
  && props.rules !== null
18693
- && props.rules.length > 0
18709
+ && props.rules.length !== 0
18694
18710
  );
18695
18711
 
18696
18712
  const hasActiveRules = computed(() =>
@@ -18703,7 +18719,7 @@ function useValidate (focused, innerLoading) {
18703
18719
  );
18704
18720
 
18705
18721
  const errorMessage = computed(() => (
18706
- typeof props.errorMessage === 'string' && props.errorMessage.length > 0
18722
+ typeof props.errorMessage === 'string' && props.errorMessage.length !== 0
18707
18723
  ? props.errorMessage
18708
18724
  : innerErrorMessage.value
18709
18725
  ));
@@ -18872,7 +18888,7 @@ function getTargetUid (val) {
18872
18888
  function fieldValueIsFilled (val) {
18873
18889
  return val !== void 0
18874
18890
  && val !== null
18875
- && ('' + val).length > 0
18891
+ && ('' + val).length !== 0
18876
18892
  }
18877
18893
 
18878
18894
  const useFieldProps = {
@@ -19068,7 +19084,7 @@ function useField (state) {
19068
19084
  hasError.value === true
19069
19085
  ? ' text-negative'
19070
19086
  : (
19071
- typeof props.standout === 'string' && props.standout.length > 0 && state.focused.value === true
19087
+ typeof props.standout === 'string' && props.standout.length !== 0 && state.focused.value === true
19072
19088
  ? ` ${ props.standout }`
19073
19089
  : (props.color !== void 0 ? ` text-${ props.color }` : '')
19074
19090
  )
@@ -19562,7 +19578,7 @@ function useFile ({
19562
19578
  const rejectedFiles = [];
19563
19579
 
19564
19580
  const done = () => {
19565
- if (rejectedFiles.length > 0) {
19581
+ if (rejectedFiles.length !== 0) {
19566
19582
  emit('rejected', rejectedFiles);
19567
19583
  }
19568
19584
  };
@@ -19592,7 +19608,7 @@ function useFile ({
19592
19608
  // Cordova/iOS allows selecting multiple files even when the
19593
19609
  // multiple attribute is not specified. We also normalize drag'n'dropped
19594
19610
  // files here:
19595
- if (props.multiple !== true && files.length > 0) {
19611
+ if (props.multiple !== true && files.length !== 0) {
19596
19612
  files = [ files[ 0 ] ];
19597
19613
  }
19598
19614
 
@@ -19647,7 +19663,7 @@ function useFile ({
19647
19663
 
19648
19664
  done();
19649
19665
 
19650
- if (files.length > 0) {
19666
+ if (files.length !== 0) {
19651
19667
  return files
19652
19668
  }
19653
19669
  }
@@ -19673,7 +19689,7 @@ function useFile ({
19673
19689
  stopAndPreventDrag(e);
19674
19690
  const files = e.dataTransfer.files;
19675
19691
 
19676
- if (files.length > 0) {
19692
+ if (files.length !== 0) {
19677
19693
  addFilesToQueue(null, files);
19678
19694
  }
19679
19695
 
@@ -19858,7 +19874,7 @@ var QFile = createComponent({
19858
19874
  }
19859
19875
 
19860
19876
  function removeFile (file) {
19861
- const index = innerValue.value.findIndex(file);
19877
+ const index = innerValue.value.indexOf(file);
19862
19878
  if (index > -1) {
19863
19879
  removeAtIndex(index);
19864
19880
  }
@@ -19956,7 +19972,7 @@ var QFile = createComponent({
19956
19972
  ? props.displayValue
19957
19973
  : selectedString.value;
19958
19974
 
19959
- return textContent.length > 0
19975
+ return textContent.length !== 0
19960
19976
  ? [
19961
19977
  h('div', {
19962
19978
  class: props.inputClass,
@@ -21372,7 +21388,7 @@ function useMask (props, emit, emitValue, inputRef) {
21372
21388
 
21373
21389
  function updateMaskInternals () {
21374
21390
  hasMask.value = props.mask !== void 0
21375
- && props.mask.length > 0
21391
+ && props.mask.length !== 0
21376
21392
  && getIsTypeText();
21377
21393
 
21378
21394
  if (hasMask.value === false) {
@@ -21386,7 +21402,7 @@ function useMask (props, emit, emitValue, inputRef) {
21386
21402
  localComputedMask = NAMED_MASKS[ props.mask ] === void 0
21387
21403
  ? props.mask
21388
21404
  : NAMED_MASKS[ props.mask ],
21389
- fillChar = typeof props.fillMask === 'string' && props.fillMask.length > 0
21405
+ fillChar = typeof props.fillMask === 'string' && props.fillMask.length !== 0
21390
21406
  ? props.fillMask.slice(0, 1)
21391
21407
  : '_',
21392
21408
  fillCharEscaped = fillChar.replace(escRegex, '\\$&'),
@@ -21467,7 +21483,7 @@ function useMask (props, emit, emitValue, inputRef) {
21467
21483
  str = str.slice(m.shift().length);
21468
21484
  extractMatch.push(...m);
21469
21485
  }
21470
- if (extractMatch.length > 0) {
21486
+ if (extractMatch.length !== 0) {
21471
21487
  return extractMatch.join('')
21472
21488
  }
21473
21489
 
@@ -21815,7 +21831,7 @@ function useMask (props, emit, emitValue, inputRef) {
21815
21831
  return val
21816
21832
  }
21817
21833
 
21818
- return props.reverseFillMask === true && val.length > 0
21834
+ return props.reverseFillMask === true && val.length !== 0
21819
21835
  ? maskReplaced.slice(0, -val.length) + val
21820
21836
  : val + maskReplaced.slice(val.length)
21821
21837
  }
@@ -22244,7 +22260,7 @@ var QInput = createComponent({
22244
22260
  hasShadow: computed(() =>
22245
22261
  props.type !== 'file'
22246
22262
  && typeof props.shadowText === 'string'
22247
- && props.shadowText.length > 0
22263
+ && props.shadowText.length !== 0
22248
22264
  ),
22249
22265
 
22250
22266
  inputRef,
@@ -22464,9 +22480,13 @@ var QIntersection = createComponent({
22464
22480
  }
22465
22481
 
22466
22482
  function getContent () {
22467
- return showing.value === true
22468
- ? [ h('div', { key: 'content', style: transitionStyle.value }, hSlot(slots.default)) ]
22469
- : void 0
22483
+ if (showing.value === true) {
22484
+ return [ h('div', { key: 'content', style: transitionStyle.value }, hSlot(slots.default)) ]
22485
+ }
22486
+
22487
+ if (slots.hidden !== void 0) {
22488
+ return [ h('div', { key: 'hidden', style: transitionStyle.value }, slots.hidden()) ]
22489
+ }
22470
22490
  }
22471
22491
 
22472
22492
  return () => {
@@ -25703,7 +25723,7 @@ var QRating = createComponent({
25703
25723
 
25704
25724
  const iconLabel = computed(() => {
25705
25725
  if (typeof props.iconAriaLabel === 'string') {
25706
- const label = props.iconAriaLabel.length > 0 ? `${ props.iconAriaLabel } ` : '';
25726
+ const label = props.iconAriaLabel.length !== 0 ? `${ props.iconAriaLabel } ` : '';
25707
25727
  return i => `${ label }${ i }`
25708
25728
  }
25709
25729
 
@@ -27753,7 +27773,7 @@ var QSelect = createComponent({
27753
27773
 
27754
27774
  resetInputValue();
27755
27775
 
27756
- if (typeof value === 'string' && value.length > 0) {
27776
+ if (typeof value === 'string' && value.length !== 0) {
27757
27777
  const needle = value.toLocaleLowerCase();
27758
27778
  const findFn = extractFn => {
27759
27779
  const option = props.options.find(opt => extractFn.value(opt).toLocaleLowerCase() === needle);
@@ -27800,7 +27820,7 @@ var QSelect = createComponent({
27800
27820
  return
27801
27821
  }
27802
27822
 
27803
- const newValueModeValid = inputValue.value.length > 0
27823
+ const newValueModeValid = inputValue.value.length !== 0
27804
27824
  && (props.newValueMode !== void 0 || props.onNewValue !== void 0);
27805
27825
 
27806
27826
  const tabShouldSelect = e.shiftKey !== true
@@ -27895,7 +27915,7 @@ var QSelect = createComponent({
27895
27915
  && e.altKey === false // not kbd shortcut
27896
27916
  && e.ctrlKey === false // not kbd shortcut
27897
27917
  && e.metaKey === false // not kbd shortcut, especially on macOS with Command key
27898
- && (e.keyCode !== 32 || searchBuffer.length > 0) // space in middle of search
27918
+ && (e.keyCode !== 32 || searchBuffer.length !== 0) // space in middle of search
27899
27919
  ) {
27900
27920
  menu.value !== true && showPopup(e);
27901
27921
 
@@ -28182,7 +28202,7 @@ var QSelect = createComponent({
28182
28202
  if (
28183
28203
  val !== ''
28184
28204
  && props.multiple !== true
28185
- && innerValue.value.length > 0
28205
+ && innerValue.value.length !== 0
28186
28206
  && userInputValue !== true
28187
28207
  && val === getOptionLabel.value(innerValue.value[ 0 ])
28188
28208
  ) {
@@ -28301,7 +28321,7 @@ var QSelect = createComponent({
28301
28321
  loading: innerLoadingIndicator.value,
28302
28322
  itemAligned: false,
28303
28323
  filled: true,
28304
- stackLabel: inputValue.value.length > 0,
28324
+ stackLabel: inputValue.value.length !== 0,
28305
28325
  ...state.splitAttrs.listeners.value,
28306
28326
  onFocus: onDialogFieldFocus,
28307
28327
  onBlur: onDialogFieldBlur
@@ -28429,7 +28449,7 @@ var QSelect = createComponent({
28429
28449
 
28430
28450
  function resetInputValue () {
28431
28451
  props.useInput === true && updateInputValue(
28432
- props.multiple !== true && props.fillInput === true && innerValue.value.length > 0
28452
+ props.multiple !== true && props.fillInput === true && innerValue.value.length !== 0
28433
28453
  ? getOptionLabel.value(innerValue.value[ 0 ]) || ''
28434
28454
  : '',
28435
28455
  true,
@@ -28441,7 +28461,7 @@ var QSelect = createComponent({
28441
28461
  let optionIndex = -1;
28442
28462
 
28443
28463
  if (show === true) {
28444
- if (innerValue.value.length > 0) {
28464
+ if (innerValue.value.length !== 0) {
28445
28465
  const val = getOptionValue.value(innerValue.value[ 0 ]);
28446
28466
  optionIndex = props.options.findIndex(v => isDeepEqual(getOptionValue.value(v), val));
28447
28467
  }
@@ -28543,7 +28563,7 @@ var QSelect = createComponent({
28543
28563
  floatingLabel: computed(() =>
28544
28564
  (props.hideSelected !== true && hasValue.value === true)
28545
28565
  || typeof inputValue.value === 'number'
28546
- || inputValue.value.length > 0
28566
+ || inputValue.value.length !== 0
28547
28567
  || fieldValueIsFilled(props.displayValue)
28548
28568
  ),
28549
28569
 
@@ -28612,7 +28632,7 @@ var QSelect = createComponent({
28612
28632
  })
28613
28633
  );
28614
28634
 
28615
- if (isTarget === true && typeof props.autocomplete === 'string' && props.autocomplete.length > 0) {
28635
+ if (isTarget === true && typeof props.autocomplete === 'string' && props.autocomplete.length !== 0) {
28616
28636
  child.push(
28617
28637
  h('input', {
28618
28638
  class: 'q-select__autocomplete-input',
@@ -28624,7 +28644,7 @@ var QSelect = createComponent({
28624
28644
  }
28625
28645
  }
28626
28646
 
28627
- if (nameProp.value !== void 0 && props.disable !== true && innerOptionsValue.value.length > 0) {
28647
+ if (nameProp.value !== void 0 && props.disable !== true && innerOptionsValue.value.length !== 0) {
28628
28648
  const opts = innerOptionsValue.value.map(value => h('option', { value, selected: true }));
28629
28649
 
28630
28650
  child.push(
@@ -31985,7 +32005,7 @@ function useTablePaginationState (vm, getCellValue) {
31985
32005
  sortBy: null,
31986
32006
  descending: false,
31987
32007
  page: 1,
31988
- rowsPerPage: props.rowsPerPageOptions.length > 0
32008
+ rowsPerPage: props.rowsPerPageOptions.length !== 0
31989
32009
  ? props.rowsPerPageOptions[ 0 ]
31990
32010
  : 5
31991
32011
  }, props.pagination)
@@ -32196,7 +32216,7 @@ function useTableRowSelection (props, emit, computedRows, getRowKey) {
32196
32216
  });
32197
32217
 
32198
32218
  const allRowsSelected = computed(() =>
32199
- computedRows.value.length > 0 && computedRows.value.every(
32219
+ computedRows.value.length !== 0 && computedRows.value.every(
32200
32220
  row => selectedKeys.value[ getRowKey.value(row) ] === true
32201
32221
  )
32202
32222
  );
@@ -33137,7 +33157,7 @@ var QTable = createComponent({
33137
33157
  }, getPaginationDiv(child))
33138
33158
  }
33139
33159
 
33140
- if (child.length > 0) {
33160
+ if (child.length !== 0) {
33141
33161
  return h('div', { class: bottomClass }, child)
33142
33162
  }
33143
33163
  }
@@ -33958,9 +33978,9 @@ var QTime = createComponent({
33958
33978
  const am = computedFormat24h.value !== true
33959
33979
  ? isAM.value === true
33960
33980
  : (
33961
- validHours.value.am.values.length > 0 && validHours.value.pm.values.length > 0
33981
+ validHours.value.am.values.length !== 0 && validHours.value.pm.values.length !== 0
33962
33982
  ? distance >= clockRect.dist
33963
- : validHours.value.am.values.length > 0
33983
+ : validHours.value.am.values.length !== 0
33964
33984
  );
33965
33985
 
33966
33986
  val = getNormalizedClockValue(
@@ -34713,7 +34733,7 @@ var QTree = createComponent({
34713
34733
  const tickStrategy = node.tickStrategy || (parent ? parent.tickStrategy : props.tickStrategy);
34714
34734
  const
34715
34735
  key = node[ props.nodeKey ],
34716
- isParent = node[ props.childrenKey ] && node[ props.childrenKey ].length > 0,
34736
+ isParent = node[ props.childrenKey ] && node[ props.childrenKey ].length !== 0,
34717
34737
  selectable = node.disabled !== true && hasSelection.value === true && node.selectable !== false,
34718
34738
  expandable = node.disabled !== true && node.expandable !== false,
34719
34739
  hasTicking = tickStrategy !== 'none',
@@ -34871,16 +34891,15 @@ var QTree = createComponent({
34871
34891
  }
34872
34892
 
34873
34893
  function expandAll () {
34874
- const
34875
- expanded = innerExpanded.value,
34876
- travel = node => {
34877
- if (node[ props.childrenKey ] && node[ props.childrenKey ].length > 0) {
34878
- if (node.expandable !== false && node.disabled !== true) {
34879
- expanded.push(node[ props.nodeKey ]);
34880
- node[ props.childrenKey ].forEach(travel);
34881
- }
34894
+ const expanded = [];
34895
+ const travel = node => {
34896
+ if (node[ props.childrenKey ] && node[ props.childrenKey ].length !== 0) {
34897
+ if (node.expandable !== false && node.disabled !== true) {
34898
+ expanded.push(node[ props.nodeKey ]);
34899
+ node[ props.childrenKey ].forEach(travel);
34882
34900
  }
34883
- };
34901
+ }
34902
+ };
34884
34903
 
34885
34904
  props.nodes.forEach(travel);
34886
34905
 
@@ -34955,7 +34974,7 @@ var QTree = createComponent({
34955
34974
  }
34956
34975
  });
34957
34976
  }
34958
- if (collapse.length > 0) {
34977
+ if (collapse.length !== 0) {
34959
34978
  target = target.filter(k => collapse.includes(k) === false);
34960
34979
  }
34961
34980
  }
@@ -35068,7 +35087,7 @@ var QTree = createComponent({
35068
35087
  ? getChildren(node[ props.childrenKey ])
35069
35088
  : [];
35070
35089
 
35071
- const isParent = children.length > 0 || (m.lazy && m.lazy !== 'loaded');
35090
+ const isParent = children.length !== 0 || (m.lazy && m.lazy !== 'loaded');
35072
35091
 
35073
35092
  let body = node.body
35074
35093
  ? slots[ `body-${ node.body }` ] || slots[ 'default-body' ]
@@ -35412,7 +35431,7 @@ function getRenderer (getPlugin) {
35412
35431
  editable.value === true
35413
35432
  && state.isBusy.value !== true
35414
35433
  && state.isUploading.value !== true
35415
- && state.queuedFiles.value.length > 0
35434
+ && state.queuedFiles.value.length !== 0
35416
35435
  );
35417
35436
 
35418
35437
  provide(uploaderKey, renderInput);
@@ -35492,7 +35511,7 @@ function getRenderer (getPlugin) {
35492
35511
  return false
35493
35512
  });
35494
35513
 
35495
- if (removed.files.length > 0) {
35514
+ if (removed.files.length !== 0) {
35496
35515
  state.files.value = localFiles;
35497
35516
  cb(removed);
35498
35517
  emit('removed', removed.files);
@@ -35620,8 +35639,8 @@ function getRenderer (getPlugin) {
35620
35639
  h('div', {
35621
35640
  class: 'flex flex-center no-wrap q-gutter-xs'
35622
35641
  }, [
35623
- getBtn(state.queuedFiles.value.length > 0, 'removeQueue', removeQueuedFiles),
35624
- getBtn(state.uploadedFiles.value.length > 0, 'removeUploaded', removeUploadedFiles),
35642
+ getBtn(state.queuedFiles.value.length !== 0, 'removeQueue', removeQueuedFiles),
35643
+ getBtn(state.uploadedFiles.value.length !== 0, 'removeUploaded', removeUploadedFiles),
35625
35644
 
35626
35645
  state.isUploading.value === true
35627
35646
  ? h(QSpinner, { class: 'q-uploader__spinner' })
@@ -35703,7 +35722,7 @@ function getRenderer (getPlugin) {
35703
35722
 
35704
35723
  onBeforeUnmount(() => {
35705
35724
  state.isUploading.value === true && state.abort();
35706
- state.files.value.length > 0 && revokeImgURLs();
35725
+ state.files.value.length !== 0 && revokeImgURLs();
35707
35726
  });
35708
35727
 
35709
35728
  const publicApi = {};
@@ -35838,14 +35857,14 @@ function injectPlugin ({ props, emit, helpers }) {
35838
35857
  }));
35839
35858
 
35840
35859
  const isUploading = computed(() => workingThreads.value > 0);
35841
- const isBusy = computed(() => promises.value.length > 0);
35860
+ const isBusy = computed(() => promises.value.length !== 0);
35842
35861
 
35843
35862
  let abortPromises;
35844
35863
 
35845
35864
  function abort () {
35846
35865
  xhrs.value.forEach(x => { x.abort(); });
35847
35866
 
35848
- if (promises.value.length > 0) {
35867
+ if (promises.value.length !== 0) {
35849
35868
  abortPromises = true;
35850
35869
  }
35851
35870
  }
@@ -36328,9 +36347,9 @@ function normalizeOptions (options) {
36328
36347
  waitFor: options.waitFor === void 0 ? 0 : options.waitFor,
36329
36348
 
36330
36349
  duration: isNaN(options.duration) === true ? 300 : parseInt(options.duration, 10),
36331
- easing: typeof options.easing === 'string' && options.easing.length > 0 ? options.easing : 'ease-in-out',
36350
+ easing: typeof options.easing === 'string' && options.easing.length !== 0 ? options.easing : 'ease-in-out',
36332
36351
  delay: isNaN(options.delay) === true ? 0 : parseInt(options.delay, 10),
36333
- fill: typeof options.fill === 'string' && options.fill.length > 0 ? options.fill : 'none',
36352
+ fill: typeof options.fill === 'string' && options.fill.length !== 0 ? options.fill : 'none',
36334
36353
 
36335
36354
  resize: options.resize === true,
36336
36355
 
@@ -37246,7 +37265,7 @@ function updateModifiers (mod, ctx) {
37246
37265
  }
37247
37266
 
37248
37267
  function insertArgs (arg, ctx) {
37249
- const opts = typeof arg === 'string' && arg.length > 0
37268
+ const opts = typeof arg === 'string' && arg.length !== 0
37250
37269
  ? arg.split(':') : [];
37251
37270
 
37252
37271
  ctx.name = opts[ 0 ];
@@ -37659,7 +37678,7 @@ var TouchHold = createDirective({
37659
37678
  // duration in ms, touch in pixels, mouse in pixels
37660
37679
  const data = [ 600, 5, 7 ];
37661
37680
 
37662
- if (typeof binding.arg === 'string' && binding.arg.length > 0) {
37681
+ if (typeof binding.arg === 'string' && binding.arg.length !== 0) {
37663
37682
  binding.arg.split(':').forEach((val, index) => {
37664
37683
  const v = parseInt(val, 10);
37665
37684
  v && (data[ index ] = v);
@@ -37754,7 +37773,7 @@ var TouchRepeat = createDirective({
37754
37773
  return
37755
37774
  }
37756
37775
 
37757
- const durations = typeof arg === 'string' && arg.length > 0
37776
+ const durations = typeof arg === 'string' && arg.length !== 0
37758
37777
  ? arg.split(':').map(val => parseInt(val, 10))
37759
37778
  : [ 0, 600, 300 ];
37760
37779
 
@@ -39399,7 +39418,7 @@ function apply ({ add, remove }) {
39399
39418
  document.title = add.title;
39400
39419
  }
39401
39420
 
39402
- if (Object.keys(remove).length > 0) {
39421
+ if (Object.keys(remove).length !== 0) {
39403
39422
  [ 'meta', 'link', 'script' ].forEach(type => {
39404
39423
  remove[ type ].forEach(name => {
39405
39424
  document.head.querySelector(`${ type }[data-qmeta="${ name }"]`).remove();
@@ -40381,21 +40400,25 @@ class EventBus {
40381
40400
 
40382
40401
  off (name, callback) {
40383
40402
  const list = this.__stack[ name ];
40384
- const liveEvents = [];
40385
40403
 
40386
- if (list !== void 0 && callback) {
40387
- list.forEach(entry => {
40388
- if (entry.fn !== callback && entry.fn.__callback !== callback) {
40389
- liveEvents.push(entry);
40390
- }
40391
- });
40404
+ if (list === void 0) {
40405
+ return this // chainable
40406
+ }
40392
40407
 
40393
- if (liveEvents.length !== 0) {
40394
- this.__stack[ name ] = liveEvents;
40395
- }
40396
- else {
40397
- delete this.__stack[ name ];
40398
- }
40408
+ if (callback === void 0) {
40409
+ delete this.__stack[ name ];
40410
+ return this // chainable
40411
+ }
40412
+
40413
+ const liveEvents = list.filter(
40414
+ entry => entry.fn !== callback && entry.fn.__callback !== callback
40415
+ );
40416
+
40417
+ if (liveEvents.length !== 0) {
40418
+ this.__stack[ name ] = liveEvents;
40419
+ }
40420
+ else {
40421
+ delete this.__stack[ name ];
40399
40422
  }
40400
40423
 
40401
40424
  return this // chainable
@@ -40651,7 +40674,7 @@ function runSequentialPromises (
40651
40674
  */
40652
40675
 
40653
40676
  const Quasar = {
40654
- version: '2.11.9',
40677
+ version: '2.12.0',
40655
40678
  install: installQuasar,
40656
40679
  lang: Plugin$8,
40657
40680
  iconSet: Plugin$7