quasar 2.2.4 → 2.3.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 (253) hide show
  1. package/dist/api/AppFullscreen.json +15 -8
  2. package/dist/api/BottomSheet.json +23 -2
  3. package/dist/api/Cookies.json +4 -3
  4. package/dist/api/Dialog.json +40 -11
  5. package/dist/api/Loading.json +4 -2
  6. package/dist/api/LoadingBar.json +8 -3
  7. package/dist/api/LocalStorage.json +8 -0
  8. package/dist/api/Morph.json +14 -7
  9. package/dist/api/Mutation.json +1 -1
  10. package/dist/api/Notify.json +41 -27
  11. package/dist/api/QAjaxBar.json +6 -3
  12. package/dist/api/QBreadcrumbs.json +8 -4
  13. package/dist/api/QBreadcrumbsEl.json +4 -2
  14. package/dist/api/QBtn.json +6 -3
  15. package/dist/api/QBtnDropdown.json +10 -5
  16. package/dist/api/QBtnToggle.json +4 -2
  17. package/dist/api/QCard.json +2 -1
  18. package/dist/api/QCardActions.json +2 -1
  19. package/dist/api/QCardSection.json +2 -1
  20. package/dist/api/QCarousel.json +10 -5
  21. package/dist/api/QCarouselControl.json +4 -2
  22. package/dist/api/QChatMessage.json +8 -4
  23. package/dist/api/QCheckbox.json +8 -4
  24. package/dist/api/QChip.json +2 -1
  25. package/dist/api/QCircularProgress.json +27 -6
  26. package/dist/api/QColor.json +6 -3
  27. package/dist/api/QDate.json +79 -5
  28. package/dist/api/QDialog.json +8 -4
  29. package/dist/api/QDrawer.json +10 -5
  30. package/dist/api/QEditor.json +17 -7
  31. package/dist/api/QExpansionItem.json +2 -1
  32. package/dist/api/QFab.json +8 -4
  33. package/dist/api/QFabAction.json +4 -2
  34. package/dist/api/QField.json +2 -1
  35. package/dist/api/QFile.json +3 -0
  36. package/dist/api/QFooter.json +3 -2
  37. package/dist/api/QHeader.json +5 -3
  38. package/dist/api/QIcon.json +2 -1
  39. package/dist/api/QImg.json +8 -4
  40. package/dist/api/QInfiniteScroll.json +6 -3
  41. package/dist/api/QInnerLoading.json +8 -4
  42. package/dist/api/QInput.json +2 -1
  43. package/dist/api/QIntersection.json +17 -1
  44. package/dist/api/QItem.json +2 -1
  45. package/dist/api/QKnob.json +8 -4
  46. package/dist/api/QLayout.json +9 -1
  47. package/dist/api/QLinearProgress.json +17 -1
  48. package/dist/api/QMarkupTable.json +2 -1
  49. package/dist/api/QMenu.json +8 -4
  50. package/dist/api/QNoSsr.json +2 -1
  51. package/dist/api/QOptionGroup.json +2 -1
  52. package/dist/api/QPage.json +2 -1
  53. package/dist/api/QPageScroller.json +8 -4
  54. package/dist/api/QPageSticky.json +2 -1
  55. package/dist/api/QPagination.json +10 -6
  56. package/dist/api/QParallax.json +2 -1
  57. package/dist/api/QPopupEdit.json +5 -2
  58. package/dist/api/QPopupProxy.json +4 -2
  59. package/dist/api/QRange.json +8 -4
  60. package/dist/api/QRating.json +2 -1
  61. package/dist/api/QResizeObserver.json +4 -1
  62. package/dist/api/QRouteTab.json +5 -26
  63. package/dist/api/QScrollArea.json +29 -4
  64. package/dist/api/QScrollObserver.json +13 -1
  65. package/dist/api/QSelect.json +135 -37
  66. package/dist/api/QSeparator.json +2 -1
  67. package/dist/api/QSkeleton.json +9 -5
  68. package/dist/api/QSlideItem.json +9 -0
  69. package/dist/api/QSlideTransition.json +2 -1
  70. package/dist/api/QSlider.json +8 -4
  71. package/dist/api/QSpinner.json +2 -1
  72. package/dist/api/QSplitter.json +4 -2
  73. package/dist/api/QStep.json +2 -1
  74. package/dist/api/QStepper.json +6 -3
  75. package/dist/api/QTab.json +4 -2
  76. package/dist/api/QTabPanels.json +6 -3
  77. package/dist/api/QTable.json +216 -93
  78. package/dist/api/QTabs.json +4 -2
  79. package/dist/api/QTime.json +16 -4
  80. package/dist/api/QTimeline.json +4 -2
  81. package/dist/api/QTimelineEntry.json +4 -2
  82. package/dist/api/QToggle.json +8 -4
  83. package/dist/api/QTooltip.json +18 -9
  84. package/dist/api/QTree.json +26 -15
  85. package/dist/api/QUploader.json +93 -5
  86. package/dist/api/QVirtualScroll.json +23 -9
  87. package/dist/api/ScrollFire.json +1 -1
  88. package/dist/api/SessionStorage.json +8 -0
  89. package/dist/api/TouchHold.json +2 -1
  90. package/dist/api/TouchRepeat.json +2 -1
  91. package/dist/api/TouchSwipe.json +2 -1
  92. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  93. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  94. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  95. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  96. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  97. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  98. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  99. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  100. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  101. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  102. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  103. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  104. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  105. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  106. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  107. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  108. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  109. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  110. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  111. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +6 -0
  112. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  113. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  114. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  115. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  116. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  117. package/dist/icon-set/svg-mdi-v4.umd.prod.js +1 -1
  118. package/dist/icon-set/svg-mdi-v5.umd.prod.js +1 -1
  119. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  120. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  121. package/dist/icon-set/themify.umd.prod.js +1 -1
  122. package/dist/lang/ar.umd.prod.js +1 -1
  123. package/dist/lang/az-Latn.umd.prod.js +1 -1
  124. package/dist/lang/bg.umd.prod.js +1 -1
  125. package/dist/lang/bn.umd.prod.js +1 -1
  126. package/dist/lang/ca.umd.prod.js +1 -1
  127. package/dist/lang/cs.umd.prod.js +1 -1
  128. package/dist/lang/da.umd.prod.js +1 -1
  129. package/dist/lang/de.umd.prod.js +1 -1
  130. package/dist/lang/el.umd.prod.js +1 -1
  131. package/dist/lang/en-GB.umd.prod.js +1 -1
  132. package/dist/lang/en-US.umd.prod.js +1 -1
  133. package/dist/lang/eo.umd.prod.js +1 -1
  134. package/dist/lang/es.umd.prod.js +1 -1
  135. package/dist/lang/et.umd.prod.js +1 -1
  136. package/dist/lang/fa-IR.umd.prod.js +1 -1
  137. package/dist/lang/fa.umd.prod.js +1 -1
  138. package/dist/lang/fi.umd.prod.js +1 -1
  139. package/dist/lang/fr.umd.prod.js +1 -1
  140. package/dist/lang/gn.umd.prod.js +1 -1
  141. package/dist/lang/he.umd.prod.js +1 -1
  142. package/dist/lang/hr.umd.prod.js +1 -1
  143. package/dist/lang/hu.umd.prod.js +1 -1
  144. package/dist/lang/id.umd.prod.js +1 -1
  145. package/dist/lang/is.umd.prod.js +1 -1
  146. package/dist/lang/it.umd.prod.js +1 -1
  147. package/dist/lang/ja.umd.prod.js +1 -1
  148. package/dist/lang/km.umd.prod.js +1 -1
  149. package/dist/lang/ko-KR.umd.prod.js +1 -1
  150. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  151. package/dist/lang/lt.umd.prod.js +1 -1
  152. package/dist/lang/lu.umd.prod.js +1 -1
  153. package/dist/lang/lv.umd.prod.js +1 -1
  154. package/dist/lang/ml.umd.prod.js +1 -1
  155. package/dist/lang/ms.umd.prod.js +1 -1
  156. package/dist/lang/nb-NO.umd.prod.js +1 -1
  157. package/dist/lang/nl.umd.prod.js +1 -1
  158. package/dist/lang/pl.umd.prod.js +1 -1
  159. package/dist/lang/pt-BR.umd.prod.js +1 -1
  160. package/dist/lang/pt.umd.prod.js +1 -1
  161. package/dist/lang/ro.umd.prod.js +1 -1
  162. package/dist/lang/ru.umd.prod.js +1 -1
  163. package/dist/lang/sk.umd.prod.js +1 -1
  164. package/dist/lang/sl.umd.prod.js +1 -1
  165. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  166. package/dist/lang/sr.umd.prod.js +1 -1
  167. package/dist/lang/sv.umd.prod.js +1 -1
  168. package/dist/lang/ta.umd.prod.js +1 -1
  169. package/dist/lang/th.umd.prod.js +1 -1
  170. package/dist/lang/tr.umd.prod.js +1 -1
  171. package/dist/lang/ug.umd.prod.js +1 -1
  172. package/dist/lang/uk.umd.prod.js +1 -1
  173. package/dist/lang/vi.umd.prod.js +1 -1
  174. package/dist/lang/zh-CN.umd.prod.js +1 -1
  175. package/dist/lang/zh-TW.umd.prod.js +1 -1
  176. package/dist/quasar.cjs.prod.js +2 -2
  177. package/dist/quasar.css +7 -2
  178. package/dist/quasar.esm.prod.js +2 -2
  179. package/dist/quasar.prod.css +1 -1
  180. package/dist/quasar.rtl.css +7 -2
  181. package/dist/quasar.rtl.prod.css +1 -1
  182. package/dist/quasar.sass +6 -3
  183. package/dist/quasar.umd.js +185 -105
  184. package/dist/quasar.umd.prod.js +2 -2
  185. package/dist/ssr-directives/Morph.js +1 -1
  186. package/dist/types/api/cookies.d.ts +1 -1
  187. package/dist/types/composables.d.ts +5 -1
  188. package/dist/types/extras/icon-set.d.ts +1 -0
  189. package/dist/types/index.d.ts +516 -176
  190. package/dist/vetur/quasar-attributes.json +14 -2
  191. package/dist/vetur/quasar-tags.json +5 -2
  192. package/dist/web-types/web-types.json +43 -8
  193. package/icon-set/svg-ionicons-v6.js +225 -0
  194. package/package.json +5 -2
  195. package/src/api.extends.json +7 -0
  196. package/src/body.js +14 -4
  197. package/src/components/btn/QBtn.js +1 -0
  198. package/src/components/circular-progress/QCircularProgress.js +6 -1
  199. package/src/components/circular-progress/QCircularProgress.json +6 -0
  200. package/src/components/date/QDate.json +59 -1
  201. package/src/components/editor/QEditor.js +2 -2
  202. package/src/components/editor/QEditor.json +6 -2
  203. package/src/components/field/QField.json +3 -3
  204. package/src/components/file/QFile.json +3 -0
  205. package/src/components/footer/QFooter.json +1 -1
  206. package/src/components/header/QHeader.json +1 -1
  207. package/src/components/icon/QIcon.js +1 -1
  208. package/src/components/infinite-scroll/QInfiniteScroll.js +48 -31
  209. package/src/components/intersection/QIntersection.js +9 -1
  210. package/src/components/intersection/QIntersection.json +9 -0
  211. package/src/components/layout/QLayout.json +8 -1
  212. package/src/components/linear-progress/QLinearProgress.js +10 -1
  213. package/src/components/linear-progress/QLinearProgress.json +6 -0
  214. package/src/components/linear-progress/QLinearProgress.sass +3 -2
  215. package/src/components/pagination/QPagination.json +0 -1
  216. package/src/components/popup-edit/QPopupEdit.json +1 -0
  217. package/src/components/popup-proxy/QPopupProxy.js +6 -15
  218. package/src/components/resize-observer/QResizeObserver.json +2 -0
  219. package/src/components/scroll-area/QScrollArea.js +8 -13
  220. package/src/components/scroll-area/QScrollArea.json +28 -4
  221. package/src/components/scroll-observer/QScrollObserver.json +11 -0
  222. package/src/components/select/QSelect.js +7 -3
  223. package/src/components/select/QSelect.json +71 -11
  224. package/src/components/skeleton/QSkeleton.json +1 -4
  225. package/src/components/slide-item/QSlideItem.json +9 -0
  226. package/src/components/slider/use-slider.js +3 -3
  227. package/src/components/table/QTable.json +155 -60
  228. package/src/components/table/table-pagination.js +6 -2
  229. package/src/components/tabs/QRouteTab.json +1 -23
  230. package/src/components/time/QTime.json +8 -0
  231. package/src/components/tree/QTree.json +14 -9
  232. package/src/components/uploader/xhr-uploader-plugin.json +105 -4
  233. package/src/components/virtual-scroll/use-virtual-scroll.js +17 -1
  234. package/src/components/virtual-scroll/use-virtual-scroll.json +5 -0
  235. package/src/composables/private/use-field.js +4 -4
  236. package/src/composables/private/use-refocus-target.js +12 -3
  237. package/src/composables/private/use-split-attrs.js +10 -7
  238. package/src/composables/use-dialog-plugin-component.js +7 -1
  239. package/src/css/core/transitions.sass +3 -1
  240. package/src/directives/Mutation.json +2 -3
  241. package/src/directives/ScrollFire.json +2 -3
  242. package/src/install-quasar.js +1 -0
  243. package/src/plugins/AppFullscreen.json +8 -8
  244. package/src/plugins/Cookies.json +2 -2
  245. package/src/plugins/Dialog.json +4 -2
  246. package/src/plugins/LoadingBar.json +4 -3
  247. package/src/plugins/Notify.json +13 -19
  248. package/src/utils/create-uploader-component.js +6 -4
  249. package/src/utils/private/get-emits-object.js +11 -0
  250. package/src/utils/private/global-dialog.json +16 -2
  251. package/src/utils/private/vm.js +3 -3
  252. package/src/utils/private/web-storage.json +10 -0
  253. package/wrappers/index.js +4 -0
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.2.4
2
+ * Quasar Framework v2.3.3
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -560,7 +560,7 @@
560
560
  }
561
561
 
562
562
  const SIZE_LIST = [ 'sm', 'md', 'lg', 'xl' ];
563
- const { passive: passive$3 } = listenOpts;
563
+ const { passive: passive$4 } = listenOpts;
564
564
 
565
565
  var Screen = defineReactivePlugin({
566
566
  width: 0,
@@ -697,11 +697,11 @@
697
697
  };
698
698
 
699
699
  this.setDebounce = delay => {
700
- updateEvt !== void 0 && target.removeEventListener('resize', updateEvt, passive$3);
700
+ updateEvt !== void 0 && target.removeEventListener('resize', updateEvt, passive$4);
701
701
  updateEvt = delay > 0
702
702
  ? debounce(this.__update, delay)
703
703
  : this.__update;
704
- target.addEventListener('resize', updateEvt, passive$3);
704
+ target.addEventListener('resize', updateEvt, passive$4);
705
705
  };
706
706
 
707
707
  this.setDebounce(updateDebounce);
@@ -1170,16 +1170,16 @@
1170
1170
  var Body = {
1171
1171
  install (opts) {
1172
1172
 
1173
- const { $q } = opts;
1174
-
1175
- $q.config.brand !== void 0 && setColors($q.config.brand);
1176
-
1177
1173
  if (this.__installed === true) { return }
1178
1174
 
1179
1175
  if (isRuntimeSsrPreHydration.value === true) {
1180
1176
  applyClientSsrCorrections();
1181
1177
  }
1182
1178
  else {
1179
+ const { $q } = opts;
1180
+
1181
+ $q.config.brand !== void 0 && setColors($q.config.brand);
1182
+
1183
1183
  const cls = getBodyClasses(client, $q.config);
1184
1184
  document.body.classList.add.apply(document.body.classList, cls);
1185
1185
  }
@@ -1437,7 +1437,7 @@
1437
1437
  }
1438
1438
 
1439
1439
  var installQuasar = function (parentApp, opts = {}) {
1440
- const $q = { version: '2.2.4' };
1440
+ const $q = { version: '2.3.3' };
1441
1441
 
1442
1442
  if (globalConfigIsFrozen === false) {
1443
1443
  if (opts.config !== void 0) {
@@ -1866,7 +1866,7 @@
1866
1866
  const imgRE = /^img:/;
1867
1867
  const svgUseRE = /^svguse:/;
1868
1868
  const ionRE = /^ion-/;
1869
- const faLaRE = /^[l|f]a[s|r|l|b|d]? /;
1869
+ const faLaRE = /^[l|f]a[s|r|l|b|d|k]? /;
1870
1870
 
1871
1871
  var QIcon = createComponent({
1872
1872
  name: 'QIcon',
@@ -2271,14 +2271,14 @@
2271
2271
 
2272
2272
  // used directly by docs too
2273
2273
  function getParentVm (vm) {
2274
- if (vm.$parent !== void 0 && vm.$parent !== null) {
2274
+ if (Object(vm.$parent) === vm.$parent) {
2275
2275
  return vm.$parent
2276
2276
  }
2277
2277
 
2278
2278
  vm = vm.$.parent;
2279
2279
 
2280
- while (vm !== void 0 && vm !== null) {
2281
- if (vm.proxy !== void 0 && vm.proxy !== null) {
2280
+ while (Object(vm) === vm) {
2281
+ if (Object(vm.proxy) === vm.proxy) {
2282
2282
  return vm.proxy
2283
2283
  }
2284
2284
 
@@ -3448,6 +3448,7 @@
3448
3448
  }
3449
3449
 
3450
3450
  function onLoadingEvt (evt) {
3451
+ stopAndPrevent(evt);
3451
3452
  evt.qSkipRipple = true;
3452
3453
  }
3453
3454
 
@@ -7028,12 +7029,21 @@
7028
7029
  });
7029
7030
 
7030
7031
  function refocusTarget (e) {
7032
+ const root = rootRef.value;
7033
+
7031
7034
  if (e !== void 0 && e.type.indexOf('key') === 0) {
7032
- if (document.activeElement !== rootRef.value && rootRef.value.contains(document.activeElement) === true) {
7033
- rootRef.value.focus();
7035
+ if (
7036
+ root !== null
7037
+ && document.activeElement !== root
7038
+ && root.contains(document.activeElement) === true
7039
+ ) {
7040
+ root.focus();
7034
7041
  }
7035
7042
  }
7036
- else if ((e === void 0 || rootRef.value.contains(e.target) === true) && refocusRef.value !== null) {
7043
+ else if (
7044
+ refocusRef.value !== null
7045
+ && (e === void 0 || (root !== null && root.contains(e.target) === true))
7046
+ ) {
7037
7047
  refocusRef.value.focus();
7038
7048
  }
7039
7049
  }
@@ -7550,6 +7560,11 @@
7550
7560
  default: 0
7551
7561
  },
7552
7562
 
7563
+ animationSpeed: {
7564
+ type: [ String, Number ],
7565
+ default: 600
7566
+ },
7567
+
7553
7568
  indeterminate: Boolean
7554
7569
  },
7555
7570
 
@@ -7569,7 +7584,7 @@
7569
7584
 
7570
7585
  const circleStyle = vue.computed(() => (
7571
7586
  props.instantFeedback !== true && props.indeterminate !== true
7572
- ? { transition: 'stroke-dashoffset 0.6s ease 0s, stroke 0.6s ease' }
7587
+ ? { transition: `stroke-dashoffset ${ props.animationSpeed }ms ease 0s, stroke ${ props.animationSpeed }ms ease` }
7573
7588
  : ''
7574
7589
  ));
7575
7590
 
@@ -8281,7 +8296,7 @@
8281
8296
  }
8282
8297
 
8283
8298
  function onPan (event) {
8284
- if (event.isFinal) {
8299
+ if (event.isFinal === true) {
8285
8300
  if (dragging.value !== void 0) {
8286
8301
  updatePosition(event.evt);
8287
8302
  // only if touch, because we also have mousedown/up:
@@ -8291,7 +8306,7 @@
8291
8306
  }
8292
8307
  active.value = false;
8293
8308
  }
8294
- else if (event.isFirst) {
8309
+ else if (event.isFirst === true) {
8295
8310
  dragging.value = getDragging(event.evt);
8296
8311
  updatePosition(event.evt);
8297
8312
  updateValue();
@@ -8321,7 +8336,7 @@
8321
8336
  function onDeactivate () {
8322
8337
  preventFocus.value = false;
8323
8338
 
8324
- if (dragging.value === void 0) {
8339
+ if (dragging.value === false) {
8325
8340
  active.value = false;
8326
8341
  }
8327
8342
 
@@ -15878,27 +15893,30 @@
15878
15893
 
15879
15894
  const listenerRE = /^on[A-Z]/;
15880
15895
 
15881
- function useSplitAttrs (attrs) {
15896
+ function useSplitAttrs (attrs, vnode) {
15882
15897
  const acc = {
15883
15898
  listeners: vue.ref({}),
15884
15899
  attributes: vue.ref({})
15885
15900
  };
15886
15901
 
15887
15902
  function update () {
15888
- const listeners = {};
15889
15903
  const attributes = {};
15904
+ const listeners = {};
15890
15905
 
15891
15906
  Object.keys(attrs).forEach(key => {
15892
- if (listenerRE.test(key) === true) {
15893
- listeners[ key ] = attrs[ key ];
15894
- }
15895
- else if (key !== 'class' && key !== 'style') {
15907
+ if (key !== 'class' && key !== 'style' && listenerRE.test(key) === false) {
15896
15908
  attributes[ key ] = attrs[ key ];
15897
15909
  }
15898
15910
  });
15899
15911
 
15900
- acc.listeners.value = listeners;
15912
+ Object.keys(vnode.props).forEach(key => {
15913
+ if (listenerRE.test(key) === true) {
15914
+ listeners[ key ] = vnode.props[ key ];
15915
+ }
15916
+ });
15917
+
15901
15918
  acc.attributes.value = attributes;
15919
+ acc.listeners.value = listeners;
15902
15920
  }
15903
15921
 
15904
15922
  vue.onBeforeUpdate(update);
@@ -16059,12 +16077,12 @@
16059
16077
  ],
16060
16078
 
16061
16079
  setup (props, { slots, emit, attrs }) {
16062
- const { proxy } = vue.getCurrentInstance();
16080
+ const { proxy, vnode } = vue.getCurrentInstance();
16063
16081
  const { $q } = proxy;
16064
16082
 
16065
16083
  const isDark = useDark(props, $q);
16066
16084
  const { inFullscreen, toggleFullscreen } = useFullscreen();
16067
- const splitAttrs = useSplitAttrs(attrs);
16085
+ const splitAttrs = useSplitAttrs(attrs, vnode);
16068
16086
 
16069
16087
  const rootRef = vue.ref(null);
16070
16088
  const contentRef = vue.ref(null);
@@ -17747,7 +17765,7 @@
17747
17765
  const useFieldEmits = [ 'update:modelValue', 'clear', 'focus', 'blur', 'popup-show', 'popup-hide' ];
17748
17766
 
17749
17767
  function useFieldState () {
17750
- const { props, attrs, proxy } = vue.getCurrentInstance();
17768
+ const { props, attrs, proxy, vnode } = vue.getCurrentInstance();
17751
17769
 
17752
17770
  const isDark = useDark(props, proxy.$q);
17753
17771
 
@@ -17760,9 +17778,9 @@
17760
17778
 
17761
17779
  innerLoading: vue.ref(false),
17762
17780
  focused: vue.ref(false),
17763
- hasPopupOpen: vue.ref(false),
17781
+ hasPopupOpen: false,
17764
17782
 
17765
- splitAttrs: useSplitAttrs(attrs),
17783
+ splitAttrs: useSplitAttrs(attrs, vnode),
17766
17784
  targetUid: vue.ref(getTargetUid(props.for)),
17767
17785
 
17768
17786
  rootRef: vue.ref(null),
@@ -17973,7 +17991,7 @@
17973
17991
  focusoutTimer = setTimeout(() => {
17974
17992
  if (
17975
17993
  document.hasFocus() === true && (
17976
- state.hasPopupOpen.value === true
17994
+ state.hasPopupOpen === true
17977
17995
  || (
17978
17996
  state.controlRef !== void 0
17979
17997
  && (
@@ -19653,6 +19671,8 @@
19653
19671
  }
19654
19672
  });
19655
19673
 
19674
+ const { passive: passive$3 } = listenOpts;
19675
+
19656
19676
  var QInfiniteScroll = createComponent({
19657
19677
  name: 'QInfiniteScroll',
19658
19678
 
@@ -19680,20 +19700,21 @@
19680
19700
  emits: [ 'load' ],
19681
19701
 
19682
19702
  setup (props, { slots, emit }) {
19683
- const fetching = vue.ref(false);
19703
+ const isFetching = vue.ref(false);
19704
+ const isWorking = vue.ref(true);
19684
19705
  const rootRef = vue.ref(null);
19685
19706
 
19686
19707
  let index = props.initialIndex || 0;
19687
- let isWorking = true;
19708
+ let scrollPos = false;
19688
19709
  let localScrollTarget, poll;
19689
19710
 
19690
19711
  const classes = vue.computed(() =>
19691
19712
  'q-infinite-scroll__loading'
19692
- + (fetching.value === true ? '' : ' invisible')
19713
+ + (isFetching.value === true ? '' : ' invisible')
19693
19714
  );
19694
19715
 
19695
19716
  function immediatePoll () {
19696
- if (props.disable === true || fetching.value === true || isWorking === false) {
19717
+ if (props.disable === true || isFetching.value === true || isWorking.value === false) {
19697
19718
  return
19698
19719
  }
19699
19720
 
@@ -19715,18 +19736,18 @@
19715
19736
  }
19716
19737
 
19717
19738
  function trigger () {
19718
- if (props.disable === true || fetching.value === true || isWorking === false) {
19739
+ if (props.disable === true || isFetching.value === true || isWorking.value === false) {
19719
19740
  return
19720
19741
  }
19721
19742
 
19722
19743
  index++;
19723
- fetching.value = true;
19744
+ isFetching.value = true;
19724
19745
 
19725
19746
  const heightBefore = getScrollHeight(localScrollTarget);
19726
19747
 
19727
19748
  emit('load', index, isDone => {
19728
- if (isWorking === true) {
19729
- fetching.value = false;
19749
+ if (isWorking.value === true) {
19750
+ isFetching.value = false;
19730
19751
  vue.nextTick(() => {
19731
19752
  if (props.reverse === true) {
19732
19753
  const
@@ -19753,31 +19774,31 @@
19753
19774
  }
19754
19775
 
19755
19776
  function resume () {
19756
- if (isWorking === false) {
19757
- isWorking = true;
19758
- localScrollTarget.addEventListener('scroll', poll, listenOpts.passive);
19777
+ if (isWorking.value === false) {
19778
+ isWorking.value = true;
19779
+ localScrollTarget.addEventListener('scroll', poll, passive$3);
19759
19780
  }
19760
19781
 
19761
19782
  immediatePoll();
19762
19783
  }
19763
19784
 
19764
19785
  function stop () {
19765
- if (isWorking === true) {
19766
- isWorking = false;
19767
- fetching.value = false;
19768
- localScrollTarget.removeEventListener('scroll', poll, listenOpts.passive);
19786
+ if (isWorking.value === true) {
19787
+ isWorking.value = false;
19788
+ isFetching.value = false;
19789
+ localScrollTarget.removeEventListener('scroll', poll, passive$3);
19769
19790
  }
19770
19791
  }
19771
19792
 
19772
19793
  function updateScrollTarget () {
19773
- if (localScrollTarget && isWorking === true) {
19774
- localScrollTarget.removeEventListener('scroll', poll, listenOpts.passive);
19794
+ if (localScrollTarget && isWorking.value === true) {
19795
+ localScrollTarget.removeEventListener('scroll', poll, passive$3);
19775
19796
  }
19776
19797
 
19777
19798
  localScrollTarget = getScrollTarget(rootRef.value, props.scrollTarget);
19778
19799
 
19779
- if (isWorking === true) {
19780
- localScrollTarget.addEventListener('scroll', poll, listenOpts.passive);
19800
+ if (isWorking.value === true) {
19801
+ localScrollTarget.addEventListener('scroll', poll, passive$3);
19781
19802
  }
19782
19803
  }
19783
19804
 
@@ -19801,30 +19822,44 @@
19801
19822
  ? immediatePoll
19802
19823
  : debounce(immediatePoll, isNaN(val) === true ? 100 : val);
19803
19824
 
19804
- if (localScrollTarget && isWorking === true) {
19825
+ if (localScrollTarget && isWorking.value === true) {
19805
19826
  if (oldPoll !== void 0) {
19806
- localScrollTarget.removeEventListener('scroll', oldPoll, listenOpts.passive);
19827
+ localScrollTarget.removeEventListener('scroll', oldPoll, passive$3);
19807
19828
  }
19808
19829
 
19809
- localScrollTarget.addEventListener('scroll', poll, listenOpts.passive);
19830
+ localScrollTarget.addEventListener('scroll', poll, passive$3);
19810
19831
  }
19811
19832
  }
19812
19833
 
19813
19834
  vue.watch(() => props.disable, val => {
19814
- if (val === true) {
19815
- stop();
19816
- }
19817
- else {
19818
- resume();
19835
+ if (val === true) { stop(); }
19836
+ else { resume(); }
19837
+ });
19838
+
19839
+ vue.watch(() => props.reverse, val => {
19840
+ if (isFetching.value === false && isWorking.value === true) {
19841
+ immediatePoll();
19819
19842
  }
19820
19843
  });
19821
19844
 
19822
19845
  vue.watch(() => props.scrollTarget, updateScrollTarget);
19823
19846
  vue.watch(() => props.debounce, setDebounce);
19824
19847
 
19848
+ vue.onActivated(() => {
19849
+ if (localScrollTarget && scrollPos !== false) {
19850
+ setVerticalScrollPosition(localScrollTarget, scrollPos);
19851
+ }
19852
+ });
19853
+
19854
+ vue.onDeactivated(() => {
19855
+ scrollPos = localScrollTarget
19856
+ ? getVerticalScrollPosition(localScrollTarget)
19857
+ : false;
19858
+ });
19859
+
19825
19860
  vue.onBeforeUnmount(() => {
19826
- if (isWorking === true) {
19827
- localScrollTarget.removeEventListener('scroll', poll, listenOpts.passive);
19861
+ if (isWorking.value === true) {
19862
+ localScrollTarget.removeEventListener('scroll', poll, passive$3);
19828
19863
  }
19829
19864
  });
19830
19865
 
@@ -19847,7 +19882,7 @@
19847
19882
  return () => {
19848
19883
  const child = hUniqueSlot(slots.default, []);
19849
19884
 
19850
- if (props.disable !== true && isWorking === true) {
19885
+ if (props.disable !== true && isWorking.value === true) {
19851
19886
  child[ props.reverse === false ? 'push' : 'unshift' ](
19852
19887
  vue.h('div', { class: classes.value }, hSlot(slots.loading))
19853
19888
  );
@@ -20985,6 +21020,10 @@
20985
21020
 
20986
21021
  once: Boolean,
20987
21022
  transition: String,
21023
+ transitionDuration: {
21024
+ type: [ String, Number ],
21025
+ default: 300
21026
+ },
20988
21027
 
20989
21028
  ssrPrerender: Boolean,
20990
21029
 
@@ -21030,6 +21069,10 @@
21030
21069
  ] ]
21031
21070
  });
21032
21071
 
21072
+ const transitionStyle = vue.computed(
21073
+ () => `--q-transition-duration: ${ props.transitionDuration }ms`
21074
+ );
21075
+
21033
21076
  function trigger (entry) {
21034
21077
  if (showing.value !== entry.isIntersecting) {
21035
21078
  showing.value = entry.isIntersecting;
@@ -21039,7 +21082,7 @@
21039
21082
 
21040
21083
  function getContent () {
21041
21084
  return showing.value === true
21042
- ? [ vue.h('div', { key: 'content' }, hSlot(slots.default)) ]
21085
+ ? [ vue.h('div', { key: 'content', style: transitionStyle.value }, hSlot(slots.default)) ]
21043
21086
  : void 0
21044
21087
  }
21045
21088
 
@@ -23210,6 +23253,10 @@
23210
23253
 
23211
23254
  const type = vue.ref(getType());
23212
23255
 
23256
+ const popupProps = vue.computed(() => (
23257
+ type.value === 'menu' ? { maxHeight: '99vh' } : {})
23258
+ );
23259
+
23213
23260
  vue.watch(() => getType(), val => {
23214
23261
  if (showing.value !== true) {
23215
23262
  type.value = val;
@@ -23235,21 +23282,9 @@
23235
23282
  }
23236
23283
 
23237
23284
  return () => {
23238
- const def = hSlot(slots.default);
23239
-
23240
- const popupProps = (
23241
- type.value === 'menu'
23242
- && def !== void 0
23243
- && def[ 0 ] !== void 0
23244
- && def[ 0 ].type !== void 0
23245
- && [ 'QDate', 'QTime', 'QCarousel', 'QColor' ].includes(
23246
- def[ 0 ].type.name
23247
- )
23248
- ) ? { cover: true, maxHeight: '99vh' } : {};
23249
-
23250
23285
  const data = {
23251
23286
  ref: popupRef,
23252
- ...popupProps,
23287
+ ...popupProps.value,
23253
23288
  ...attrs,
23254
23289
  onShow,
23255
23290
  onHide
@@ -23270,7 +23305,7 @@
23270
23305
  });
23271
23306
  }
23272
23307
 
23273
- return vue.h(component, data, () => def)
23308
+ return vue.h(component, data, slots.default)
23274
23309
  }
23275
23310
  }
23276
23311
  });
@@ -23313,6 +23348,11 @@
23313
23348
  query: Boolean,
23314
23349
  rounded: Boolean,
23315
23350
 
23351
+ animationSpeed: {
23352
+ type: [ String, Number ],
23353
+ default: 2100
23354
+ },
23355
+
23316
23356
  instantFeedback: Boolean
23317
23357
  },
23318
23358
 
@@ -23322,6 +23362,10 @@
23322
23362
  const sizeStyle = useSize(props, defaultSizes);
23323
23363
 
23324
23364
  const motion = vue.computed(() => props.indeterminate === true || props.query === true);
23365
+ const style = vue.computed(() => ({
23366
+ ...(sizeStyle.value !== null ? sizeStyle.value : {}),
23367
+ '--q-linear-progress-speed': `${ props.animationSpeed }ms`
23368
+ }));
23325
23369
 
23326
23370
  const classes = vue.computed(() =>
23327
23371
  'q-linear-progress'
@@ -23372,7 +23416,7 @@
23372
23416
 
23373
23417
  return vue.h('div', {
23374
23418
  class: classes.value,
23375
- style: sizeStyle.value,
23419
+ style: style.value,
23376
23420
  role: 'progressbar',
23377
23421
  'aria-valuemin': 0,
23378
23422
  'aria-valuemax': 1,
@@ -24356,6 +24400,11 @@
24356
24400
  vertical: { offset: 'offsetY', scroll: 'scrollTop', dir: 'down', dist: 'y' },
24357
24401
  horizontal: { offset: 'offsetX', scroll: 'scrollLeft', dir: 'right', dist: 'x' }
24358
24402
  };
24403
+ const panOpts = {
24404
+ prevent: true,
24405
+ mouse: true,
24406
+ mouseAllDir: true
24407
+ };
24359
24408
 
24360
24409
  var QScrollArea = createComponent({
24361
24410
  name: 'QScrollArea',
@@ -24511,7 +24560,7 @@
24511
24560
  );
24512
24561
 
24513
24562
  const mainStyle = vue.computed(() => (
24514
- scroll.vertical.thumbHidden.value === true || scroll.horizontal.thumbHidden.value === true
24563
+ scroll.vertical.thumbHidden.value === true && scroll.horizontal.thumbHidden.value === true
24515
24564
  ? props.contentStyle
24516
24565
  : props.contentActiveStyle
24517
24566
  ));
@@ -24520,24 +24569,14 @@
24520
24569
  TouchPan,
24521
24570
  e => { onPanThumb(e, 'vertical'); },
24522
24571
  void 0,
24523
- {
24524
- vertical: true,
24525
- prevent: true,
24526
- mouse: true,
24527
- mouseAllDir: true
24528
- }
24572
+ { vertical: true, ...panOpts }
24529
24573
  ] ];
24530
24574
 
24531
24575
  const thumbHorizDir = [ [
24532
24576
  TouchPan,
24533
24577
  e => { onPanThumb(e, 'horizontal'); },
24534
24578
  void 0,
24535
- {
24536
- horizontal: true,
24537
- prevent: true,
24538
- mouse: true,
24539
- mouseAllDir: true
24540
- }
24579
+ { horizontal: true, ...panOpts }
24541
24580
  ] ];
24542
24581
 
24543
24582
  function getScroll () {
@@ -25459,6 +25498,22 @@
25459
25498
  setVirtualScrollSize();
25460
25499
  });
25461
25500
 
25501
+ vue.onActivated(() => {
25502
+ const scrollEl = getVirtualScrollTarget();
25503
+
25504
+ if (prevScrollStart !== void 0 && scrollEl !== void 0 && scrollEl !== null && scrollEl.nodeType !== 8) {
25505
+ setScroll(
25506
+ scrollEl,
25507
+ prevScrollStart,
25508
+ props.virtualScrollHorizontal,
25509
+ $q.lang.rtl
25510
+ );
25511
+ }
25512
+ else {
25513
+ scrollTo(prevToIndex);
25514
+ }
25515
+ });
25516
+
25462
25517
  setOverflowAnchor !== noop && vue.onBeforeUnmount(() => {
25463
25518
  const styleSheet = document.getElementById(vsId + '_ss');
25464
25519
  styleSheet !== null && styleSheet.remove();
@@ -26632,7 +26687,7 @@
26632
26687
  function getDialog () {
26633
26688
  const content = [
26634
26689
  vue.h(QField, {
26635
- class: `col-auto ${ state.fieldClass }`,
26690
+ class: `col-auto ${ state.fieldClass.value }`,
26636
26691
  ...innerFieldProps.value,
26637
26692
  for: state.targetUid.value,
26638
26693
  dark: isOptionsDark.value,
@@ -26798,14 +26853,14 @@
26798
26853
  function onControlPopupShow (e) {
26799
26854
  e !== void 0 && stop(e);
26800
26855
  emit('popup-show', e);
26801
- state.hasPopupOpen.value = true;
26856
+ state.hasPopupOpen = true;
26802
26857
  state.onControlFocusin(e);
26803
26858
  }
26804
26859
 
26805
26860
  function onControlPopupHide (e) {
26806
26861
  e !== void 0 && stop(e);
26807
26862
  emit('popup-hide', e);
26808
- state.hasPopupOpen.value = false;
26863
+ state.hasPopupOpen = false;
26809
26864
  state.onControlFocusout(e);
26810
26865
  }
26811
26866
 
@@ -26877,6 +26932,10 @@
26877
26932
  ) {
26878
26933
  return hasDialog === true ? getDialog() : getMenu()
26879
26934
  }
26935
+ else if (state.hasPopupOpen === true) {
26936
+ // explicitly set it otherwise TAB will not blur component
26937
+ state.hasPopupOpen = false;
26938
+ }
26880
26939
  },
26881
26940
 
26882
26941
  controlEvents: {
@@ -30244,7 +30303,7 @@
30244
30303
  default: () => [ 5, 7, 10, 15, 20, 25, 50, 0 ]
30245
30304
  },
30246
30305
 
30247
- 'onUpdate:pagination': Function
30306
+ 'onUpdate:pagination': [ Function, Array ]
30248
30307
  };
30249
30308
 
30250
30309
  function useTablePaginationState (vm, getCellValue) {
@@ -30282,6 +30341,10 @@
30282
30341
  vue.nextTick(() => {
30283
30342
  emit('request', {
30284
30343
  pagination: prop.pagination || computedPagination.value,
30344
+ // FIXME: 'props.filter' is string/object, but 'prop.filter' can be controlled by the user, and the docs are suggesting 'prop.filter' is a function
30345
+ // So, value of 'filter' becomes function/string/object, which makes a lot of things unpredictable and can break things
30346
+ // Either update the docs to say 'prop.filter' should be a string/object, or use 'prop.filter || props.filterMethod' or maybe get 'computedFilterFunction' here and use that instead of 'props.filterMethod'
30347
+ // The examples on our docs are using 'filter' as a string in onRequest handler, but the JSON API is saying 'filter' is a function
30285
30348
  filter: prop.filter || props.filter,
30286
30349
  getCellValue
30287
30350
  });
@@ -30294,7 +30357,7 @@
30294
30357
  ...val
30295
30358
  });
30296
30359
 
30297
- if (samePagination(computedPagination.value, newPagination)) {
30360
+ if (samePagination(computedPagination.value, newPagination) === true) {
30298
30361
  if (isServerSide.value === true && forceServerRequest === true) {
30299
30362
  sendServerRequest(newPagination);
30300
30363
  }
@@ -34023,6 +34086,20 @@
34023
34086
  }
34024
34087
  }
34025
34088
 
34089
+ const trueFn = () => true;
34090
+
34091
+ function getEmitsObject (emitsArray) {
34092
+ const emitsObject = {};
34093
+
34094
+ emitsArray.forEach(val => {
34095
+ emitsObject[ val ] = trueFn;
34096
+ });
34097
+
34098
+ return emitsObject
34099
+ }
34100
+
34101
+ const coreEmitsObject = getEmitsObject(coreEmits);
34102
+
34026
34103
  var createUploaderComponent = ({ name, props, emits, injectPlugin }) => createComponent({
34027
34104
  name,
34028
34105
 
@@ -34031,10 +34108,9 @@
34031
34108
  ...props
34032
34109
  },
34033
34110
 
34034
- emits: [
34035
- ...coreEmits,
34036
- ...emits
34037
- ],
34111
+ emits: Object(emits) === emits
34112
+ ? { ...coreEmitsObject, ...emits }
34113
+ : [ ...coreEmits, ...emits ],
34038
34114
 
34039
34115
  setup () {
34040
34116
  return getRenderer(injectPlugin)
@@ -34068,7 +34144,7 @@
34068
34144
  factory: Function
34069
34145
  };
34070
34146
 
34071
- const emits = [ 'factory-failed', 'uploaded', 'failed', 'uploading' ];
34147
+ const emits$1 = [ 'factory-failed', 'uploaded', 'failed', 'uploading' ];
34072
34148
 
34073
34149
  function injectPlugin ({ props, emit, helpers }) {
34074
34150
  const xhrs = vue.ref([]);
@@ -34294,7 +34370,7 @@
34294
34370
  var xhrUploaderPlugin = {
34295
34371
  name: 'QUploader',
34296
34372
  props: props$2,
34297
- emits,
34373
+ emits: emits$1,
34298
34374
  injectPlugin
34299
34375
  };
34300
34376
 
@@ -38676,7 +38752,11 @@
38676
38752
  }
38677
38753
  }
38678
38754
 
38679
- useDialogPluginComponent.emits = [ 'ok', 'hide' ];
38755
+ // Don't forget to update the types in "ui/types/composables.d.ts"
38756
+ const emits = [ 'ok', 'hide' ];
38757
+
38758
+ useDialogPluginComponent.emits = emits;
38759
+ useDialogPluginComponent.emitsObject = getEmitsObject(emits);
38680
38760
 
38681
38761
  function useMeta (metaOptions) {
38682
38762
  {
@@ -38732,7 +38812,7 @@
38732
38812
  });
38733
38813
 
38734
38814
  var index_umd = {
38735
- version: '2.2.4',
38815
+ version: '2.3.3',
38736
38816
  install (app, opts) {
38737
38817
  installQuasar(app, {
38738
38818
  components,