quasar 2.10.0 → 2.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/dist/api/Dialog.json +28 -69
  2. package/dist/api/Intersection.json +25 -100
  3. package/dist/api/Loading.json +5 -20
  4. package/dist/api/LoadingBar.json +1 -7
  5. package/dist/api/LocalStorage.json +4 -16
  6. package/dist/api/Morph.json +2 -14
  7. package/dist/api/Notify.json +0 -3
  8. package/dist/api/Platform.json +1 -4
  9. package/dist/api/QAjaxBar.json +1 -11
  10. package/dist/api/QBreadcrumbs.json +0 -8
  11. package/dist/api/QBtn.json +0 -3
  12. package/dist/api/QBtnDropdown.json +0 -12
  13. package/dist/api/QCarousel.json +0 -10
  14. package/dist/api/QCarouselControl.json +0 -3
  15. package/dist/api/QCircularProgress.json +0 -23
  16. package/dist/api/QColor.json +0 -3
  17. package/dist/api/QDialog.json +18 -9
  18. package/dist/api/QDrawer.json +0 -6
  19. package/dist/api/QExpansionItem.json +0 -3
  20. package/dist/api/QFab.json +1 -6
  21. package/dist/api/QFabAction.json +1 -3
  22. package/dist/api/QField.json +1 -6
  23. package/dist/api/QFile.json +12 -29
  24. package/dist/api/QFooter.json +0 -3
  25. package/dist/api/QHeader.json +0 -6
  26. package/dist/api/QInfiniteScroll.json +9 -16
  27. package/dist/api/QInnerLoading.json +0 -4
  28. package/dist/api/QInput.json +8 -15
  29. package/dist/api/QIntersection.json +0 -4
  30. package/dist/api/QItemLabel.json +0 -5
  31. package/dist/api/QKnob.json +3 -36
  32. package/dist/api/QLayout.json +6 -24
  33. package/dist/api/QLinearProgress.json +0 -6
  34. package/dist/api/QList.json +15 -0
  35. package/dist/api/QMenu.json +7 -12
  36. package/dist/api/QOptionGroup.json +0 -3
  37. package/dist/api/QPage.json +2 -8
  38. package/dist/api/QPageScroller.json +0 -9
  39. package/dist/api/QPageSticky.json +0 -3
  40. package/dist/api/QPagination.json +4 -25
  41. package/dist/api/QParallax.json +2 -14
  42. package/dist/api/QPopupEdit.json +0 -8
  43. package/dist/api/QPopupProxy.json +21 -4
  44. package/dist/api/QRange.json +5 -32
  45. package/dist/api/QRating.json +0 -4
  46. package/dist/api/QResizeObserver.json +2 -8
  47. package/dist/api/QScrollArea.json +8 -36
  48. package/dist/api/QScrollObserver.json +6 -24
  49. package/dist/api/QSelect.json +18 -108
  50. package/dist/api/QSlideItem.json +1 -6
  51. package/dist/api/QSlideTransition.json +0 -4
  52. package/dist/api/QSlider.json +3 -24
  53. package/dist/api/QSpinner.json +0 -4
  54. package/dist/api/QSplitter.json +1 -4
  55. package/dist/api/QStepper.json +0 -7
  56. package/dist/api/QTabPanels.json +0 -7
  57. package/dist/api/QTable.json +43 -191
  58. package/dist/api/QTabs.json +0 -6
  59. package/dist/api/QTime.json +3 -12
  60. package/dist/api/QTooltip.json +7 -18
  61. package/dist/api/QTree.json +0 -3
  62. package/dist/api/QUploader.json +5 -16
  63. package/dist/api/QVirtualScroll.json +11 -56
  64. package/dist/api/Screen.json +9 -36
  65. package/dist/api/Scroll.json +2 -8
  66. package/dist/api/SessionStorage.json +4 -16
  67. package/dist/api/TouchHold.json +3 -12
  68. package/dist/api/TouchPan.json +7 -28
  69. package/dist/api/TouchRepeat.json +6 -24
  70. package/dist/api/TouchSwipe.json +3 -12
  71. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  72. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  73. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  74. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  75. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  76. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  77. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  78. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  79. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  80. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  81. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  82. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  83. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  84. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  85. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  86. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  87. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  88. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  89. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  90. package/dist/icon-set/mdi-v7.umd.prod.js +6 -0
  91. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  92. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  93. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  94. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  95. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  96. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  97. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  98. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  99. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  100. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  101. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  102. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  103. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +1 -1
  104. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
  105. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
  106. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  107. package/dist/icon-set/svg-mdi-v7.umd.prod.js +6 -0
  108. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  109. package/dist/icon-set/themify.umd.prod.js +1 -1
  110. package/dist/lang/ar-TN.umd.prod.js +1 -1
  111. package/dist/lang/ar.umd.prod.js +1 -1
  112. package/dist/lang/az-Latn.umd.prod.js +1 -1
  113. package/dist/lang/bg.umd.prod.js +1 -1
  114. package/dist/lang/bn.umd.prod.js +1 -1
  115. package/dist/lang/ca.umd.prod.js +1 -1
  116. package/dist/lang/cs.umd.prod.js +1 -1
  117. package/dist/lang/da.umd.prod.js +1 -1
  118. package/dist/lang/de.umd.prod.js +1 -1
  119. package/dist/lang/el.umd.prod.js +1 -1
  120. package/dist/lang/en-GB.umd.prod.js +1 -1
  121. package/dist/lang/en-US.umd.prod.js +1 -1
  122. package/dist/lang/eo.umd.prod.js +1 -1
  123. package/dist/lang/es.umd.prod.js +1 -1
  124. package/dist/lang/et.umd.prod.js +1 -1
  125. package/dist/lang/eu.umd.prod.js +1 -1
  126. package/dist/lang/fa-IR.umd.prod.js +1 -1
  127. package/dist/lang/fa.umd.prod.js +1 -1
  128. package/dist/lang/fi.umd.prod.js +1 -1
  129. package/dist/lang/fr.umd.prod.js +1 -1
  130. package/dist/lang/gn.umd.prod.js +1 -1
  131. package/dist/lang/he.umd.prod.js +1 -1
  132. package/dist/lang/hr.umd.prod.js +1 -1
  133. package/dist/lang/hu.umd.prod.js +1 -1
  134. package/dist/lang/id.umd.prod.js +1 -1
  135. package/dist/lang/is.umd.prod.js +1 -1
  136. package/dist/lang/it.umd.prod.js +1 -1
  137. package/dist/lang/ja.umd.prod.js +1 -1
  138. package/dist/lang/km.umd.prod.js +1 -1
  139. package/dist/lang/ko-KR.umd.prod.js +1 -1
  140. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  141. package/dist/lang/kz.umd.prod.js +1 -1
  142. package/dist/lang/lt.umd.prod.js +1 -1
  143. package/dist/lang/lu.umd.prod.js +1 -1
  144. package/dist/lang/lv.umd.prod.js +1 -1
  145. package/dist/lang/ml.umd.prod.js +1 -1
  146. package/dist/lang/mm.umd.prod.js +1 -1
  147. package/dist/lang/ms.umd.prod.js +1 -1
  148. package/dist/lang/my.umd.prod.js +1 -1
  149. package/dist/lang/nb-NO.umd.prod.js +1 -1
  150. package/dist/lang/nl.umd.prod.js +1 -1
  151. package/dist/lang/pl.umd.prod.js +1 -1
  152. package/dist/lang/pt-BR.umd.prod.js +1 -1
  153. package/dist/lang/pt.umd.prod.js +1 -1
  154. package/dist/lang/ro.umd.prod.js +1 -1
  155. package/dist/lang/ru.umd.prod.js +1 -1
  156. package/dist/lang/sk.umd.prod.js +1 -1
  157. package/dist/lang/sl.umd.prod.js +1 -1
  158. package/dist/lang/sm.umd.prod.js +1 -1
  159. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  160. package/dist/lang/sr.umd.prod.js +1 -1
  161. package/dist/lang/sv.umd.prod.js +1 -1
  162. package/dist/lang/ta.umd.prod.js +1 -1
  163. package/dist/lang/th.umd.prod.js +1 -1
  164. package/dist/lang/tr.umd.prod.js +1 -1
  165. package/dist/lang/ug.umd.prod.js +1 -1
  166. package/dist/lang/uk.umd.prod.js +1 -1
  167. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  168. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  169. package/dist/lang/vi.umd.prod.js +1 -1
  170. package/dist/lang/zh-CN.umd.prod.js +1 -1
  171. package/dist/lang/zh-TW.umd.prod.js +1 -1
  172. package/dist/quasar.cjs.prod.js +2 -2
  173. package/dist/quasar.css +3 -3
  174. package/dist/quasar.esm.js +223 -192
  175. package/dist/quasar.esm.prod.js +2 -2
  176. package/dist/quasar.prod.css +1 -1
  177. package/dist/quasar.rtl.css +10 -3
  178. package/dist/quasar.rtl.prod.css +1 -1
  179. package/dist/quasar.sass +5 -4
  180. package/dist/quasar.umd.js +222 -191
  181. package/dist/quasar.umd.prod.js +2 -2
  182. package/dist/types/api/dialog.d.ts +101 -0
  183. package/dist/types/api/qpopupproxy.d.ts +3 -0
  184. package/dist/types/api.d.ts +2 -0
  185. package/dist/types/index.d.ts +56 -97
  186. package/dist/vetur/quasar-attributes.json +4 -0
  187. package/dist/vetur/quasar-tags.json +2 -1
  188. package/dist/web-types/web-types.json +142 -132
  189. package/icon-set/mdi-v7.js +146 -0
  190. package/icon-set/mdi-v7.mjs +141 -0
  191. package/icon-set/svg-mdi-v7.js +224 -0
  192. package/icon-set/svg-mdi-v7.mjs +224 -0
  193. package/package.json +4 -4
  194. package/src/api.extends.json +1 -2
  195. package/src/components/ajax-bar/QAjaxBar.json +5 -11
  196. package/src/components/breadcrumbs/QBreadcrumbs.json +0 -2
  197. package/src/components/breadcrumbs/QBreadcrumbsEl.json +1 -2
  198. package/src/components/btn/QBtn.json +1 -3
  199. package/src/components/btn/__tests__/QBtn.spec.js +87 -14
  200. package/src/components/btn/__tests__/use-btn.spec.js +385 -58
  201. package/src/components/btn-dropdown/QBtnDropdown.js +4 -12
  202. package/src/components/btn-dropdown/QBtnDropdown.json +0 -2
  203. package/src/components/btn-toggle/QBtnToggle.json +2 -4
  204. package/src/components/carousel/QCarousel.json +4 -9
  205. package/src/components/carousel/QCarouselControl.json +0 -1
  206. package/src/components/checkbox/use-checkbox.json +1 -2
  207. package/src/components/circular-progress/QCircularProgress.json +0 -5
  208. package/src/components/color/QColor.json +0 -1
  209. package/src/components/date/QDate.js +6 -4
  210. package/src/components/date/QDate.json +28 -56
  211. package/src/components/dialog/QDialog.js +34 -41
  212. package/src/components/dialog/QDialog.json +9 -2
  213. package/src/components/dialog-bottom-sheet/BottomSheet.js +1 -2
  214. package/src/components/dialog-plugin/DialogPlugin.js +4 -4
  215. package/src/components/drawer/QDrawer.js +5 -5
  216. package/src/components/drawer/QDrawer.json +0 -4
  217. package/src/components/editor/QEditor.json +3 -6
  218. package/src/components/expansion-item/QExpansionItem.js +3 -4
  219. package/src/components/expansion-item/QExpansionItem.json +3 -8
  220. package/src/components/fab/QFab.js +3 -6
  221. package/src/components/fab/QFab.json +0 -1
  222. package/src/components/fab/QFab.sass +2 -1
  223. package/src/components/fab/use-fab.json +0 -1
  224. package/src/components/field/QField.json +0 -1
  225. package/src/components/file/QFile.js +4 -1
  226. package/src/components/file/QFile.json +19 -20
  227. package/src/components/footer/QFooter.json +0 -1
  228. package/src/components/form/QForm.js +5 -3
  229. package/src/components/form/QForm.json +2 -4
  230. package/src/components/header/QHeader.json +0 -4
  231. package/src/components/img/QImg.js +20 -19
  232. package/src/components/infinite-scroll/QInfiniteScroll.json +9 -6
  233. package/src/components/inner-loading/QInnerLoading.js +2 -5
  234. package/src/components/input/QInput.js +12 -3
  235. package/src/components/input/QInput.json +11 -7
  236. package/src/components/input/use-mask.js +3 -1
  237. package/src/components/intersection/QIntersection.json +0 -1
  238. package/src/components/item/QItem.json +1 -2
  239. package/src/components/item/QItemLabel.json +0 -1
  240. package/src/components/item/QList.js +7 -2
  241. package/src/components/item/QList.json +7 -0
  242. package/src/components/knob/QKnob.js +3 -3
  243. package/src/components/knob/QKnob.json +3 -12
  244. package/src/components/layout/QLayout.js +1 -1
  245. package/src/components/layout/QLayout.json +6 -12
  246. package/src/components/linear-progress/QLinearProgress.json +0 -2
  247. package/src/components/menu/QMenu.js +12 -6
  248. package/src/components/menu/QMenu.json +0 -2
  249. package/src/components/option-group/QOptionGroup.json +2 -5
  250. package/src/components/page/QPage.json +3 -6
  251. package/src/components/page-scroller/QPageScroller.json +0 -2
  252. package/src/components/page-sticky/QPageSticky.json +0 -1
  253. package/src/components/pagination/QPagination.json +5 -13
  254. package/src/components/parallax/QParallax.json +2 -6
  255. package/src/components/popup-edit/QPopupEdit.js +3 -3
  256. package/src/components/popup-edit/QPopupEdit.json +4 -10
  257. package/src/components/popup-proxy/QPopupProxy.js +6 -0
  258. package/src/components/popup-proxy/QPopupProxy.json +19 -1
  259. package/src/components/radio/QRadio.json +1 -2
  260. package/src/components/range/QRange.json +2 -4
  261. package/src/components/rating/QRating.json +0 -1
  262. package/src/components/resize-observer/QResizeObserver.json +2 -4
  263. package/src/components/scroll-area/QScrollArea.js +15 -4
  264. package/src/components/scroll-area/QScrollArea.json +24 -50
  265. package/src/components/scroll-observer/QScrollObserver.js +2 -0
  266. package/src/components/scroll-observer/QScrollObserver.json +6 -12
  267. package/src/components/select/QSelect.js +28 -27
  268. package/src/components/select/QSelect.json +30 -65
  269. package/src/components/select/QSelect.sass +2 -2
  270. package/src/components/slide-item/QSlideItem.json +1 -2
  271. package/src/components/slide-transition/QSlideTransition.json +0 -1
  272. package/src/components/slider/use-slider.json +33 -70
  273. package/src/components/spinner/QSpinner.json +0 -1
  274. package/src/components/splitter/QSplitter.json +1 -2
  275. package/src/components/table/QTable.js +3 -3
  276. package/src/components/table/QTable.json +118 -239
  277. package/src/components/tabs/QRouteTab.json +0 -1
  278. package/src/components/tabs/QTabs.json +0 -2
  279. package/src/components/time/QTime.json +10 -20
  280. package/src/components/tooltip/QTooltip.js +2 -5
  281. package/src/components/tooltip/QTooltip.json +0 -4
  282. package/src/components/tree/QTree.js +6 -6
  283. package/src/components/tree/QTree.json +15 -31
  284. package/src/components/uploader/QUploader.json +13 -22
  285. package/src/components/uploader/xhr-uploader-plugin.js +1 -1
  286. package/src/components/uploader/xhr-uploader-plugin.json +25 -50
  287. package/src/components/virtual-scroll/QVirtualScroll.json +5 -10
  288. package/src/components/virtual-scroll/use-virtual-scroll.js +1 -1
  289. package/src/components/virtual-scroll/use-virtual-scroll.json +8 -19
  290. package/src/composables/private/use-field.js +1 -1
  291. package/src/composables/private/use-field.json +2 -3
  292. package/src/composables/private/use-file.json +4 -13
  293. package/src/composables/private/use-model-toggle.js +3 -3
  294. package/src/composables/private/use-panel.js +2 -2
  295. package/src/composables/private/use-panel.json +0 -2
  296. package/src/composables/private/use-portal.js +5 -1
  297. package/src/composables/private/use-portal.json +7 -1
  298. package/src/composables/private/use-transition.js +17 -11
  299. package/src/composables/private/use-transition.json +0 -1
  300. package/src/composables/private/use-validate.json +1 -3
  301. package/src/directives/Intersection.json +26 -53
  302. package/src/directives/Morph.json +4 -8
  303. package/src/directives/Mutation.json +6 -12
  304. package/src/directives/Scroll.json +2 -4
  305. package/src/directives/TouchHold.json +3 -6
  306. package/src/directives/TouchPan.json +7 -14
  307. package/src/directives/TouchRepeat.json +6 -12
  308. package/src/directives/TouchSwipe.json +3 -6
  309. package/src/plugins/BottomSheet.json +1 -2
  310. package/src/plugins/Cookies.json +2 -4
  311. package/src/plugins/Dialog.json +35 -73
  312. package/src/plugins/Loading.json +6 -11
  313. package/src/plugins/LoadingBar.json +3 -6
  314. package/src/plugins/Notify.json +4 -5
  315. package/src/plugins/Platform.json +3 -6
  316. package/src/plugins/Screen.json +9 -18
  317. package/src/utils/private/global-dialog.json +6 -12
  318. package/src/utils/private/portal.js +4 -4
  319. package/src/utils/private/web-storage.json +6 -10
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.10.0
2
+ * Quasar Framework v2.10.2
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -1612,7 +1612,7 @@
1612
1612
  }
1613
1613
 
1614
1614
  var installQuasar = function (parentApp, opts = {}) {
1615
- const $q = { version: '2.10.0' };
1615
+ const $q = { version: '2.10.2' };
1616
1616
 
1617
1617
  if (globalConfigIsFrozen === false) {
1618
1618
  if (opts.config !== void 0) {
@@ -4187,7 +4187,7 @@
4187
4187
  };
4188
4188
 
4189
4189
  const useModelToggleEmits = [
4190
- 'before-show', 'show', 'before-hide', 'hide'
4190
+ 'beforeShow', 'show', 'beforeHide', 'hide'
4191
4191
  ];
4192
4192
 
4193
4193
  // handleShow/handleHide -> removeTick(), self (& emit show)
@@ -4247,7 +4247,7 @@
4247
4247
 
4248
4248
  showing.value = true;
4249
4249
 
4250
- emit('before-show', evt);
4250
+ emit('beforeShow', evt);
4251
4251
 
4252
4252
  if (handleShow !== void 0) {
4253
4253
  handleShow(evt);
@@ -4286,7 +4286,7 @@
4286
4286
 
4287
4287
  showing.value = false;
4288
4288
 
4289
- emit('before-hide', evt);
4289
+ emit('beforeHide', evt);
4290
4290
 
4291
4291
  if (handleHide !== void 0) {
4292
4292
  handleHide(evt);
@@ -4408,8 +4408,8 @@
4408
4408
 
4409
4409
  function getPortalProxy (el) {
4410
4410
  return portalProxyList.find(proxy =>
4411
- proxy.__qPortalInnerRef.value !== null
4412
- && proxy.__qPortalInnerRef.value.contains(el)
4411
+ proxy.contentEl !== null
4412
+ && proxy.contentEl.contains(el)
4413
4413
  )
4414
4414
  }
4415
4415
 
@@ -4423,7 +4423,7 @@
4423
4423
  return getParentProxy(proxy)
4424
4424
  }
4425
4425
  }
4426
- else if (proxy.__qPortalInnerRef !== void 0) {
4426
+ else if (proxy.__qPortal === true) {
4427
4427
  // treat it as point of separation if parent is QPopupProxy
4428
4428
  // (so mobile matches desktop behavior)
4429
4429
  // and hide it too
@@ -4444,7 +4444,7 @@
4444
4444
 
4445
4445
  function closePortals (proxy, evt, depth) {
4446
4446
  while (depth !== 0 && proxy !== void 0 && proxy !== null) {
4447
- if (proxy.__qPortalInnerRef !== void 0) {
4447
+ if (proxy.__qPortal === true) {
4448
4448
  depth--;
4449
4449
 
4450
4450
  if (proxy.$options.name === 'QMenu') {
@@ -4536,7 +4536,10 @@
4536
4536
  vue.onUnmounted(() => { hidePortal(true); });
4537
4537
 
4538
4538
  // needed for portal vm detection
4539
- vm.proxy.__qPortalInnerRef = innerRef;
4539
+ vm.proxy.__qPortal = true;
4540
+
4541
+ // public way of accessing the rendered content
4542
+ injectProp(vm.proxy, 'contentEl', () => innerRef.value);
4540
4543
 
4541
4544
  return {
4542
4545
  showPortal,
@@ -4574,18 +4577,24 @@
4574
4577
  }
4575
4578
  };
4576
4579
 
4577
- function useTransition (props, showing) {
4578
- const transitionState = vue.ref(showing.value);
4580
+ function useTransition (props, defaultShowFn = () => {}, defaultHideFn = () => {}) {
4581
+ return {
4582
+ transitionProps: vue.computed(() => {
4583
+ const show = `q-transition--${ props.transitionShow || defaultShowFn() }`;
4584
+ const hide = `q-transition--${ props.transitionHide || defaultHideFn() }`;
4579
4585
 
4580
- vue.watch(showing, val => {
4581
- vue.nextTick(() => { transitionState.value = val; });
4582
- });
4586
+ return {
4587
+ appear: true,
4583
4588
 
4584
- // return transition
4585
- return {
4586
- transition: vue.computed(() => 'q-transition--' + (
4587
- transitionState.value === true ? props.transitionHide : props.transitionShow
4588
- )),
4589
+ enterFromClass: `${ show }-enter-from`,
4590
+ enterActiveClass: `${ show }-enter-active`,
4591
+ enterToClass: `${ show }-enter-to`,
4592
+
4593
+ leaveFromClass: `${ hide }-leave-from`,
4594
+ leaveActiveClass: `${ hide }-leave-active`,
4595
+ leaveToClass: `${ hide }-leave-to`
4596
+ }
4597
+ }),
4589
4598
 
4590
4599
  transitionStyle: vue.computed(() => `--q-transition-duration: ${ props.transitionDuration }ms`)
4591
4600
  }
@@ -5308,7 +5317,7 @@
5308
5317
 
5309
5318
  emits: [
5310
5319
  ...useModelToggleEmits,
5311
- 'click', 'escape-key'
5320
+ 'click', 'escapeKey'
5312
5321
  ],
5313
5322
 
5314
5323
  setup (props, { slots, emit, attrs }) {
@@ -5329,7 +5338,7 @@
5329
5338
  const isDark = useDark(props, $q);
5330
5339
  const { registerTick, removeTick } = useTick();
5331
5340
  const { registerTimeout } = useTimeout();
5332
- const { transition, transitionStyle } = useTransition(props, showing);
5341
+ const { transitionProps, transitionStyle } = useTransition(props);
5333
5342
  const { localScrollTarget, changeScrollEvent, unconfigureScrollTarget } = useScrollTarget(props, configureScrollTarget);
5334
5343
 
5335
5344
  const { anchorEl, canShow } = useAnchor({ showing });
@@ -5409,7 +5418,10 @@
5409
5418
  let node = innerRef.value;
5410
5419
 
5411
5420
  if (node && node.contains(document.activeElement) !== true) {
5412
- node = node.querySelector('[autofocus], [data-autofocus]') || node;
5421
+ node = node.querySelector('[autofocus][tabindex], [data-autofocus][tabindex]')
5422
+ || node.querySelector('[autofocus] [tabindex], [data-autofocus] [tabindex]')
5423
+ || node.querySelector('[autofocus], [data-autofocus]')
5424
+ || node;
5413
5425
  node.focus({ preventScroll: true });
5414
5426
  }
5415
5427
  });
@@ -5484,7 +5496,10 @@
5484
5496
  || evt.qClickOutside !== true
5485
5497
  )
5486
5498
  ) {
5487
- refocusTarget.focus();
5499
+ ((evt && evt.type.indexOf('key') === 0
5500
+ ? refocusTarget.closest('[tabindex]:not([tabindex^="-"])')
5501
+ : void 0
5502
+ ) || refocusTarget).focus();
5488
5503
  refocusTarget = null;
5489
5504
  }
5490
5505
 
@@ -5546,7 +5561,7 @@
5546
5561
  }
5547
5562
 
5548
5563
  function onEscapeKey (evt) {
5549
- emit('escape-key');
5564
+ emit('escapeKey');
5550
5565
  hide(evt);
5551
5566
  }
5552
5567
 
@@ -5574,7 +5589,7 @@
5574
5589
  function renderPortalContent () {
5575
5590
  return vue.h(
5576
5591
  vue.Transition,
5577
- { name: transition.value, appear: true },
5592
+ transitionProps.value,
5578
5593
  () => (
5579
5594
  showing.value === true
5580
5595
  ? vue.h('div', {
@@ -5681,13 +5696,6 @@
5681
5696
 
5682
5697
  const btnPropsList = Object.keys(useBtnProps);
5683
5698
 
5684
- // let's not duplicate type checking and prop validations
5685
- // so just specify the props here with no type description
5686
- const btnProps = btnPropsList.reduce(
5687
- (acc, key) => (acc[ key ] = {}) && acc,
5688
- {}
5689
- );
5690
-
5691
5699
  const passBtnProps = props => btnPropsList.reduce(
5692
5700
  (acc, key) => {
5693
5701
  const val = props[ key ];
@@ -5703,7 +5711,7 @@
5703
5711
  name: 'QBtnDropdown',
5704
5712
 
5705
5713
  props: {
5706
- ...btnProps,
5714
+ ...useBtnProps,
5707
5715
  ...useTransitionProps,
5708
5716
 
5709
5717
  modelValue: Boolean,
@@ -5736,7 +5744,7 @@
5736
5744
  toggleAriaLabel: String
5737
5745
  },
5738
5746
 
5739
- emits: [ 'update:modelValue', 'click', 'before-show', 'show', 'before-hide', 'hide' ],
5747
+ emits: [ 'update:modelValue', 'click', 'beforeShow', 'show', 'beforeHide', 'hide' ],
5740
5748
 
5741
5749
  setup (props, { slots, emit }) {
5742
5750
  const { proxy } = vue.getCurrentInstance();
@@ -5750,7 +5758,6 @@
5750
5758
  'aria-expanded': showing.value === true ? 'true' : 'false',
5751
5759
  'aria-haspopup': 'true',
5752
5760
  'aria-controls': targetUid,
5753
- 'aria-owns': targetUid,
5754
5761
  'aria-label': props.toggleAriaLabel || proxy.$q.lang.label[ showing.value === true ? 'collapse' : 'expand' ](props.label)
5755
5762
  };
5756
5763
 
@@ -5784,7 +5791,7 @@
5784
5791
 
5785
5792
  function onBeforeShow (e) {
5786
5793
  showing.value = true;
5787
- emit('before-show', e);
5794
+ emit('beforeShow', e);
5788
5795
  }
5789
5796
 
5790
5797
  function onShow (e) {
@@ -5794,7 +5801,7 @@
5794
5801
 
5795
5802
  function onBeforeHide (e) {
5796
5803
  showing.value = false;
5797
- emit('before-hide', e);
5804
+ emit('beforeHide', e);
5798
5805
  }
5799
5806
 
5800
5807
  function onHide (e) {
@@ -6556,7 +6563,7 @@
6556
6563
  keepAliveMax: Number
6557
6564
  };
6558
6565
 
6559
- const usePanelEmits = [ 'update:modelValue', 'before-transition', 'transition' ];
6566
+ const usePanelEmits = [ 'update:modelValue', 'beforeTransition', 'transition' ];
6560
6567
 
6561
6568
  function usePanel () {
6562
6569
  const { props, emit, proxy } = vue.getCurrentInstance();
@@ -6628,7 +6635,7 @@
6628
6635
 
6629
6636
  if (panelIndex.value !== index) {
6630
6637
  panelIndex.value = index;
6631
- emit('before-transition', newVal, oldVal);
6638
+ emit('beforeTransition', newVal, oldVal);
6632
6639
  vue.nextTick(() => {
6633
6640
  emit('transition', newVal, oldVal);
6634
6641
  });
@@ -13088,7 +13095,7 @@
13088
13095
 
13089
13096
  emits: [
13090
13097
  ...useDatetimeEmits,
13091
- 'range-start', 'range-end', 'navigation'
13098
+ 'rangeStart', 'rangeEnd', 'navigation'
13092
13099
  ],
13093
13100
 
13094
13101
  setup (props, { slots, emit }) {
@@ -13714,7 +13721,9 @@
13714
13721
  });
13715
13722
 
13716
13723
  vue.watch(view, () => {
13717
- blurTargetRef.value !== null && blurTargetRef.value.focus();
13724
+ if (blurTargetRef.value !== null && proxy.$el.contains(document.activeElement) === true) {
13725
+ blurTargetRef.value.focus();
13726
+ }
13718
13727
  });
13719
13728
 
13720
13729
  vue.watch(() => viewModel.value.year, year => {
@@ -14397,7 +14406,7 @@
14397
14406
  finalHash: initHash
14398
14407
  };
14399
14408
 
14400
- emit('range-start', getShortDate(day));
14409
+ emit('rangeStart', getShortDate(day));
14401
14410
  }
14402
14411
  else {
14403
14412
  const
@@ -14410,7 +14419,7 @@
14410
14419
  editRange.value = null;
14411
14420
  addToModel(initHash === finalHash ? day : { target: day, ...payload });
14412
14421
 
14413
- emit('range-end', {
14422
+ emit('rangeEnd', {
14414
14423
  from: getShortDate(payload.from),
14415
14424
  to: getShortDate(payload.to)
14416
14425
  });
@@ -14715,7 +14724,7 @@
14715
14724
  left: 'fixed-left items-center'
14716
14725
  };
14717
14726
 
14718
- const transitions = {
14727
+ const defaultTransitions = {
14719
14728
  standard: [ 'scale', 'scale' ],
14720
14729
  top: [ 'slide-down', 'slide-up' ],
14721
14730
  bottom: [ 'slide-up', 'slide-down' ],
@@ -14732,8 +14741,8 @@
14732
14741
  ...useModelToggleProps,
14733
14742
  ...useTransitionProps,
14734
14743
 
14735
- transitionShow: String,
14736
- transitionHide: String,
14744
+ transitionShow: String, // override useTransitionProps
14745
+ transitionHide: String, // override useTransitionProps
14737
14746
 
14738
14747
  persistent: Boolean,
14739
14748
  autoClose: Boolean,
@@ -14764,7 +14773,7 @@
14764
14773
 
14765
14774
  emits: [
14766
14775
  ...useModelToggleEmits,
14767
- 'shake', 'click', 'escape-key'
14776
+ 'shake', 'click', 'escapeKey'
14768
14777
  ],
14769
14778
 
14770
14779
  setup (props, { slots, emit, attrs }) {
@@ -14772,7 +14781,6 @@
14772
14781
 
14773
14782
  const innerRef = vue.ref(null);
14774
14783
  const showing = vue.ref(false);
14775
- const transitionState = vue.ref(false);
14776
14784
  const animating = vue.ref(false);
14777
14785
 
14778
14786
  let shakeTimeout, refocusTarget = null, isMaximized, avoidAutoClose;
@@ -14787,6 +14795,12 @@
14787
14795
  const { registerTimeout } = useTimeout();
14788
14796
  const { registerTick, removeTick } = useTick();
14789
14797
 
14798
+ const { transitionProps, transitionStyle } = useTransition(
14799
+ props,
14800
+ () => defaultTransitions[ props.position ][ 0 ],
14801
+ () => defaultTransitions[ props.position ][ 1 ]
14802
+ );
14803
+
14790
14804
  const { showPortal, hidePortal, portalIsAccessible, renderPortal } = usePortal(
14791
14805
  vm, innerRef, renderPortalContent, /* pls do check if on a global dialog */ true
14792
14806
  );
@@ -14811,26 +14825,6 @@
14811
14825
  + (props.square === true ? ' q-dialog__inner--square' : '')
14812
14826
  );
14813
14827
 
14814
- const transitionShow = vue.computed(() =>
14815
- 'q-transition--'
14816
- + (props.transitionShow === void 0 ? transitions[ props.position ][ 0 ] : props.transitionShow)
14817
- );
14818
-
14819
- const transitionHide = vue.computed(() =>
14820
- 'q-transition--'
14821
- + (props.transitionHide === void 0 ? transitions[ props.position ][ 1 ] : props.transitionHide)
14822
- );
14823
-
14824
- const transition = vue.computed(() => (
14825
- transitionState.value === true
14826
- ? transitionHide.value
14827
- : transitionShow.value
14828
- ));
14829
-
14830
- const transitionStyle = vue.computed(
14831
- () => `--q-transition-duration: ${ props.transitionDuration }ms`
14832
- );
14833
-
14834
14828
  const useBackdrop = vue.computed(() => showing.value === true && props.seamless !== true);
14835
14829
 
14836
14830
  const onEvents = vue.computed(() => (
@@ -14845,12 +14839,6 @@
14845
14839
  attrs.class
14846
14840
  ]);
14847
14841
 
14848
- vue.watch(showing, val => {
14849
- vue.nextTick(() => {
14850
- transitionState.value = val;
14851
- });
14852
- });
14853
-
14854
14842
  vue.watch(() => props.maximized, state => {
14855
14843
  showing.value === true && updateMaximized(state);
14856
14844
  });
@@ -14930,7 +14918,10 @@
14930
14918
  hidePortal();
14931
14919
 
14932
14920
  if (refocusTarget !== null) {
14933
- refocusTarget.focus();
14921
+ ((evt && evt.type.indexOf('key') === 0
14922
+ ? refocusTarget.closest('[tabindex]:not([tabindex^="-"])')
14923
+ : void 0
14924
+ ) || refocusTarget).focus();
14934
14925
  refocusTarget = null;
14935
14926
  }
14936
14927
 
@@ -14950,13 +14941,23 @@
14950
14941
  return
14951
14942
  }
14952
14943
 
14953
- node = node.querySelector(selector || '[autofocus], [data-autofocus]') || node;
14944
+ node = (selector !== '' ? node.querySelector(selector) : null)
14945
+ || node.querySelector('[autofocus][tabindex], [data-autofocus][tabindex]')
14946
+ || node.querySelector('[autofocus] [tabindex], [data-autofocus] [tabindex]')
14947
+ || node.querySelector('[autofocus], [data-autofocus]')
14948
+ || node;
14954
14949
  node.focus({ preventScroll: true });
14955
14950
  });
14956
14951
  }
14957
14952
 
14958
- function shake () {
14959
- focus();
14953
+ function shake (focusTarget) {
14954
+ if (focusTarget && typeof focusTarget.focus === 'function') {
14955
+ focusTarget.focus({ preventScroll: true });
14956
+ }
14957
+ else {
14958
+ focus();
14959
+ }
14960
+
14960
14961
  emit('shake');
14961
14962
 
14962
14963
  const node = innerRef.value;
@@ -14982,7 +14983,7 @@
14982
14983
  props.maximized !== true && props.noShake !== true && shake();
14983
14984
  }
14984
14985
  else {
14985
- emit('escape-key');
14986
+ emit('escapeKey');
14986
14987
  hide();
14987
14988
  }
14988
14989
  }
@@ -15037,7 +15038,7 @@
15037
15038
  hide(e);
15038
15039
  }
15039
15040
  else if (props.noShake !== true) {
15040
- shake();
15041
+ shake(e.relatedTarget);
15041
15042
  }
15042
15043
  }
15043
15044
 
@@ -15080,14 +15081,15 @@
15080
15081
  class: 'q-dialog__backdrop fixed-full',
15081
15082
  style: transitionStyle.value,
15082
15083
  'aria-hidden': 'true',
15083
- onMousedown: onBackdropClick
15084
+ tabindex: -1,
15085
+ onFocusin: onBackdropClick
15084
15086
  })
15085
15087
  : null
15086
15088
  )),
15087
15089
 
15088
15090
  vue.h(
15089
15091
  vue.Transition,
15090
- { name: transition.value, appear: true },
15092
+ transitionProps.value,
15091
15093
  () => (
15092
15094
  showing.value === true
15093
15095
  ? vue.h('div', {
@@ -15160,7 +15162,7 @@
15160
15162
 
15161
15163
  emits: [
15162
15164
  ...useModelToggleEmits,
15163
- 'on-layout', 'mini-state'
15165
+ 'onLayout', 'miniState'
15164
15166
  ],
15165
15167
 
15166
15168
  setup (props, { slots, emit, attrs }) {
@@ -15493,7 +15495,7 @@
15493
15495
  vue.watch(offset, val => { updateLayout('offset', val); });
15494
15496
 
15495
15497
  vue.watch(onLayout, val => {
15496
- emit('on-layout', val);
15498
+ emit('onLayout', val);
15497
15499
  updateLayout('space', val);
15498
15500
  });
15499
15501
 
@@ -15517,7 +15519,7 @@
15517
15519
  }
15518
15520
  });
15519
15521
 
15520
- vue.watch(isMini, val => { emit('mini-state', val); });
15522
+ vue.watch(isMini, val => { emit('miniState', val); });
15521
15523
 
15522
15524
  function applyPosition (position) {
15523
15525
  if (position === void 0) {
@@ -15682,8 +15684,8 @@
15682
15684
  }
15683
15685
 
15684
15686
  vue.onMounted(() => {
15685
- emit('on-layout', onLayout.value);
15686
- emit('mini-state', isMini.value);
15687
+ emit('onLayout', onLayout.value);
15688
+ emit('miniState', isMini.value);
15687
15689
 
15688
15690
  lastDesktopState = props.showIfAbove === true;
15689
15691
 
@@ -16236,7 +16238,7 @@
16236
16238
 
16237
16239
  const { registerTick, removeTick } = useTick();
16238
16240
  const { registerTimeout } = useTimeout();
16239
- const { transition, transitionStyle } = useTransition(props, showing);
16241
+ const { transitionProps, transitionStyle } = useTransition(props);
16240
16242
  const { localScrollTarget, changeScrollEvent, unconfigureScrollTarget } = useScrollTarget(props, configureScrollTarget);
16241
16243
 
16242
16244
  const { anchorEl, canShow, anchorEvents } = useAnchor({ showing, configureAnchorEl });
@@ -16433,10 +16435,7 @@
16433
16435
  }
16434
16436
 
16435
16437
  function renderPortalContent () {
16436
- return vue.h(vue.Transition, {
16437
- name: transition.value,
16438
- appear: true
16439
- }, getTooltipContent)
16438
+ return vue.h(vue.Transition, transitionProps.value, getTooltipContent)
16440
16439
  }
16441
16440
 
16442
16441
  vue.onBeforeUnmount(anchorCleanup);
@@ -17810,7 +17809,7 @@
17810
17809
 
17811
17810
  emits: [
17812
17811
  ...useModelToggleEmits,
17813
- 'click', 'after-show', 'after-hide'
17812
+ 'click', 'afterShow', 'afterHide'
17814
17813
  ],
17815
17814
 
17816
17815
  setup (props, { slots, emit }) {
@@ -17892,7 +17891,6 @@
17892
17891
  return {
17893
17892
  role: 'button',
17894
17893
  'aria-expanded': showing.value === true ? 'true' : 'false',
17895
- 'aria-owns': targetUid,
17896
17894
  'aria-controls': targetUid,
17897
17895
  'aria-label': toggleAriaLabel
17898
17896
  }
@@ -17919,11 +17917,11 @@
17919
17917
  }
17920
17918
 
17921
17919
  function onShow () {
17922
- emit('after-show');
17920
+ emit('afterShow');
17923
17921
  }
17924
17922
 
17925
17923
  function onHide () {
17926
- emit('after-hide');
17924
+ emit('afterHide');
17927
17925
  }
17928
17926
 
17929
17927
  function enterGroup () {
@@ -18273,13 +18271,11 @@
18273
18271
 
18274
18272
  const actionAttrs = vue.computed(() => {
18275
18273
  const attrs = {
18276
- id: targetUid
18274
+ id: targetUid,
18275
+ role: 'menu'
18277
18276
  };
18278
18277
 
18279
- if (showing.value === true) {
18280
- attrs.role = 'menu';
18281
- }
18282
- else {
18278
+ if (showing.value !== true) {
18283
18279
  attrs[ 'aria-hidden' ] = 'true';
18284
18280
  }
18285
18281
 
@@ -18348,7 +18344,6 @@
18348
18344
  'aria-expanded': showing.value === true ? 'true' : 'false',
18349
18345
  'aria-haspopup': 'true',
18350
18346
  'aria-controls': targetUid,
18351
- 'aria-owns': targetUid,
18352
18347
  onClick: toggle
18353
18348
  }, getTriggerContent),
18354
18349
 
@@ -18751,7 +18746,7 @@
18751
18746
  maxlength: [ Number, String ]
18752
18747
  };
18753
18748
 
18754
- const useFieldEmits = [ 'update:modelValue', 'clear', 'focus', 'blur', 'popup-show', 'popup-hide' ];
18749
+ const useFieldEmits = [ 'update:modelValue', 'clear', 'focus', 'blur', 'popupShow', 'popupHide' ];
18755
18750
 
18756
18751
  function useFieldState () {
18757
18752
  const { props, attrs, proxy, vnode } = vue.getCurrentInstance();
@@ -19846,9 +19841,11 @@
19846
19841
  Object.assign(proxy, {
19847
19842
  removeAtIndex,
19848
19843
  removeFile,
19849
- getNativeElement: () => inputRef.value
19844
+ getNativeElement: () => inputRef.value // deprecated
19850
19845
  });
19851
19846
 
19847
+ injectProp(proxy, 'nativeEl', () => inputRef.value);
19848
+
19852
19849
  return useField(state)
19853
19850
  }
19854
19851
  });
@@ -20059,7 +20056,7 @@
20059
20056
  onSubmit: Function
20060
20057
  },
20061
20058
 
20062
- emits: [ 'reset', 'validation-success', 'validation-error' ],
20059
+ emits: [ 'reset', 'validationSuccess', 'validationError' ],
20063
20060
 
20064
20061
  setup (props, { slots, emit }) {
20065
20062
  const vm = vue.getCurrentInstance();
@@ -20076,7 +20073,7 @@
20076
20073
  const index = ++validateIndex;
20077
20074
 
20078
20075
  const emitEvent = (res, ref) => {
20079
- emit('validation-' + (res === true ? 'success' : 'error'), ref);
20076
+ emit('validation' + (res === true ? 'Success' : 'Error'), ref);
20080
20077
  };
20081
20078
 
20082
20079
  const validateComponent = comp => {
@@ -20178,7 +20175,9 @@
20178
20175
  addFocusFn(() => {
20179
20176
  if (rootRef.value === null) { return }
20180
20177
 
20181
- const target = rootRef.value.querySelector('[autofocus], [data-autofocus]')
20178
+ const target = rootRef.value.querySelector('[autofocus][tabindex], [data-autofocus][tabindex]')
20179
+ || rootRef.value.querySelector('[autofocus] [tabindex], [data-autofocus] [tabindex]')
20180
+ || rootRef.value.querySelector('[autofocus], [data-autofocus]')
20182
20181
  || Array.prototype.find.call(rootRef.value.querySelectorAll('[tabindex]'), el => el.tabIndex > -1);
20183
20182
 
20184
20183
  target !== null && target !== void 0 && target.focus({ preventScroll: true });
@@ -20529,7 +20528,7 @@
20529
20528
 
20530
20529
  const images = [
20531
20530
  vue.ref(null),
20532
- vue.ref(props.placeholderSrc !== void 0 ? { src: props.placeholderSrc } : null)
20531
+ vue.ref(getPlaceholderSrc())
20533
20532
  ];
20534
20533
 
20535
20534
  const position = vue.ref(0);
@@ -20569,18 +20568,24 @@
20569
20568
  : null
20570
20569
  }
20571
20570
 
20571
+ function getPlaceholderSrc () {
20572
+ return props.placeholderSrc !== void 0
20573
+ ? { src: props.placeholderSrc }
20574
+ : null
20575
+ }
20576
+
20572
20577
  function addImage (imgProps) {
20573
20578
  clearTimeout(loadTimer);
20574
20579
  hasError.value = false;
20575
20580
 
20576
20581
  if (imgProps === null) {
20577
20582
  isLoading.value = false;
20578
- images[ 0 ].value = null;
20579
- images[ 1 ].value = null;
20580
- return
20583
+ images[ position.value ^ 1 ].value = getPlaceholderSrc();
20584
+ }
20585
+ else {
20586
+ isLoading.value = true;
20581
20587
  }
20582
20588
 
20583
- isLoading.value = true;
20584
20589
  images[ position.value ].value = imgProps;
20585
20590
  }
20586
20591
 
@@ -20615,7 +20620,7 @@
20615
20620
  // if component has been already destroyed
20616
20621
  if (loadTimer === null) { return }
20617
20622
 
20618
- position.value = position.value === 1 ? 0 : 1;
20623
+ position.value = position.value ^ 1;
20619
20624
  images[ position.value ].value = null;
20620
20625
  isLoading.value = false;
20621
20626
  hasError.value = false;
@@ -20626,19 +20631,11 @@
20626
20631
  clearTimeout(loadTimer);
20627
20632
  isLoading.value = false;
20628
20633
  hasError.value = true;
20629
- images[ 0 ].value = null;
20630
- images[ 1 ].value = null;
20634
+ images[ position.value ].value = null;
20635
+ images[ position.value ^ 1 ].value = getPlaceholderSrc();
20631
20636
  emit('error', err);
20632
20637
  }
20633
20638
 
20634
- function getContainer (key, child) {
20635
- return vue.h(
20636
- 'div',
20637
- { class: 'q-img__container absolute-full', key },
20638
- child
20639
- )
20640
- }
20641
-
20642
20639
  function getImage (index) {
20643
20640
  const img = images[ index ].value;
20644
20641
 
@@ -20666,7 +20663,11 @@
20666
20663
  data.class += ' q-img__image--loaded';
20667
20664
  }
20668
20665
 
20669
- return getContainer('img' + index, vue.h('img', data))
20666
+ return vue.h(
20667
+ 'div',
20668
+ { class: 'q-img__container absolute-full', key: 'img' + index },
20669
+ vue.h('img', data)
20670
+ )
20670
20671
  }
20671
20672
 
20672
20673
  function getContent () {
@@ -20991,7 +20992,7 @@
20991
20992
  const vm = vue.getCurrentInstance();
20992
20993
  const isDark = useDark(props, vm.proxy.$q);
20993
20994
 
20994
- const { transition, transitionStyle } = useTransition(props, vue.computed(() => props.showing));
20995
+ const { transitionProps, transitionStyle } = useTransition(props);
20995
20996
 
20996
20997
  const classes = vue.computed(() =>
20997
20998
  'q-inner-loading absolute-full column flex-center'
@@ -21035,10 +21036,7 @@
21035
21036
  : null
21036
21037
  }
21037
21038
 
21038
- return () => vue.h(vue.Transition, {
21039
- name: transition.value,
21040
- appear: true
21041
- }, getContent)
21039
+ return () => vue.h(vue.Transition, transitionProps.value, getContent)
21042
21040
  }
21043
21041
  });
21044
21042
 
@@ -21226,7 +21224,7 @@
21226
21224
 
21227
21225
  computedMask = mask;
21228
21226
  computedUnmask = val => {
21229
- const unmaskMatch = unmaskMatcher.exec(val);
21227
+ const unmaskMatch = unmaskMatcher.exec(props.reverseFillMask === true ? val : val.slice(0, mask.length));
21230
21228
  if (unmaskMatch !== null) {
21231
21229
  val = unmaskMatch.slice(1).join('');
21232
21230
  }
@@ -21460,6 +21458,8 @@
21460
21458
  };
21461
21459
 
21462
21460
  function onMaskedKeydown (e) {
21461
+ emit('keydown', e);
21462
+
21463
21463
  if (shouldIgnoreKey(e) === true) {
21464
21464
  return
21465
21465
  }
@@ -21639,7 +21639,8 @@
21639
21639
 
21640
21640
  emits: [
21641
21641
  ...useFieldEmits,
21642
- 'paste', 'change'
21642
+ 'paste', 'change',
21643
+ 'keydown', 'animationend'
21643
21644
  ],
21644
21645
 
21645
21646
  setup (props, { emit, attrs }) {
@@ -21697,7 +21698,7 @@
21697
21698
  }
21698
21699
 
21699
21700
  if (props.autogrow === true) {
21700
- evt.onAnimationend = adjustHeight;
21701
+ evt.onAnimationend = onAnimationend;
21701
21702
  }
21702
21703
 
21703
21704
  return evt
@@ -21852,6 +21853,11 @@
21852
21853
  props.autogrow === true && adjustHeight();
21853
21854
  }
21854
21855
 
21856
+ function onAnimationend (e) {
21857
+ emit('animationend', e);
21858
+ adjustHeight();
21859
+ }
21860
+
21855
21861
  function emitValue (val, stopWatcher) {
21856
21862
  emitValueFn = () => {
21857
21863
  if (
@@ -22015,9 +22021,11 @@
22015
22021
  Object.assign(proxy, {
22016
22022
  focus,
22017
22023
  select,
22018
- getNativeElement: () => inputRef.value
22024
+ getNativeElement: () => inputRef.value // deprecated
22019
22025
  });
22020
22026
 
22027
+ injectProp(proxy, 'nativeEl', () => inputRef.value);
22028
+
22021
22029
  return renderFn
22022
22030
  }
22023
22031
  });
@@ -22216,7 +22224,12 @@
22216
22224
  bordered: Boolean,
22217
22225
  dense: Boolean,
22218
22226
  separator: Boolean,
22219
- padding: Boolean
22227
+ padding: Boolean,
22228
+
22229
+ tag: {
22230
+ type: String,
22231
+ default: 'div'
22232
+ }
22220
22233
  },
22221
22234
 
22222
22235
  setup (props, { slots }) {
@@ -22232,7 +22245,7 @@
22232
22245
  + (props.padding === true ? ' q-list--padding' : '')
22233
22246
  );
22234
22247
 
22235
- return () => vue.h('div', { class: classes.value, role: 'list' }, hSlot(slots.default))
22248
+ return () => vue.h(props.tag, { class: classes.value }, hSlot(slots.default))
22236
22249
  }
22237
22250
  });
22238
22251
 
@@ -22270,7 +22283,7 @@
22270
22283
  readonly: Boolean
22271
22284
  },
22272
22285
 
22273
- emits: [ 'update:modelValue', 'change', 'drag-value' ],
22286
+ emits: [ 'update:modelValue', 'change', 'dragValue' ],
22274
22287
 
22275
22288
  setup (props, { slots, emit }) {
22276
22289
  const { proxy } = vue.getCurrentInstance();
@@ -22317,7 +22330,7 @@
22317
22330
  )
22318
22331
  );
22319
22332
 
22320
- const decimals = vue.computed(() => (String(props.step).trim('0').split('.')[ 1 ] || '').length);
22333
+ const decimals = vue.computed(() => (String(props.step).trim().split('.')[ 1 ] || '').length);
22321
22334
  const step = vue.computed(() => (props.step === 0 ? 1 : props.step));
22322
22335
  const instantFeedback = vue.computed(() => props.instantFeedback === true || dragging.value === true);
22323
22336
 
@@ -22452,7 +22465,7 @@
22452
22465
 
22453
22466
  newModel = between(newModel, innerMin.value, innerMax.value);
22454
22467
 
22455
- emit('drag-value', newModel);
22468
+ emit('dragValue', newModel);
22456
22469
 
22457
22470
  if (model.value !== newModel) {
22458
22471
  model.value = newModel;
@@ -22627,6 +22640,8 @@
22627
22640
 
22628
22641
  const { proxy } = vue.getCurrentInstance();
22629
22642
 
22643
+ vue.watch(() => proxy.$q.lang.rtl, emitEvent);
22644
+
22630
22645
  vue.onMounted(() => {
22631
22646
  parentEl = proxy.$el.parentNode;
22632
22647
  configureScrollTarget();
@@ -22727,7 +22742,7 @@
22727
22742
  if (height.value !== newHeight) {
22728
22743
  resized = true;
22729
22744
  height.value = newHeight;
22730
- props.onScrollHeight !== void 0 && emit('scroll-height', newHeight);
22745
+ props.onScrollHeight !== void 0 && emit('scrollHeight', newHeight);
22731
22746
  updateScrollbarWidth();
22732
22747
  }
22733
22748
  if (width.value !== newWidth) {
@@ -24378,7 +24393,7 @@
24378
24393
 
24379
24394
  emits: [
24380
24395
  'update:modelValue', 'save', 'cancel',
24381
- 'before-show', 'show', 'before-hide', 'hide'
24396
+ 'beforeShow', 'show', 'beforeHide', 'hide'
24382
24397
  ],
24383
24398
 
24384
24399
  setup (props, { slots, emit }) {
@@ -24442,7 +24457,7 @@
24442
24457
  validated = false;
24443
24458
  initialValue.value = cloneDeep(props.modelValue);
24444
24459
  currentModel.value = cloneDeep(props.modelValue);
24445
- emit('before-show');
24460
+ emit('beforeShow');
24446
24461
  }
24447
24462
 
24448
24463
  function onShow () {
@@ -24460,7 +24475,7 @@
24460
24475
  }
24461
24476
  }
24462
24477
 
24463
- emit('before-hide');
24478
+ emit('beforeHide');
24464
24479
  }
24465
24480
 
24466
24481
  function onHide () {
@@ -24582,6 +24597,11 @@
24582
24597
  toggle (evt) { popupRef.value.toggle(evt); }
24583
24598
  });
24584
24599
 
24600
+ injectProp(proxy, 'currentComponent', () => ({
24601
+ type: type.value,
24602
+ ref: popupRef.value
24603
+ }));
24604
+
24585
24605
  return () => {
24586
24606
  const data = {
24587
24607
  ref: popupRef,
@@ -25729,7 +25749,7 @@
25729
25749
  scroll.horizontal.percentage = vue.computed(() => {
25730
25750
  const diff = scroll.horizontal.size.value - container.horizontal.value;
25731
25751
  if (diff <= 0) { return 0 }
25732
- const p = between(scroll.horizontal.position.value / diff, 0, 1);
25752
+ const p = between(Math.abs(scroll.horizontal.position.value) / diff, 0, 1);
25733
25753
  return Math.round(p * 10000) / 10000
25734
25754
  });
25735
25755
  scroll.horizontal.thumbHidden = vue.computed(() =>
@@ -25755,7 +25775,7 @@
25755
25775
  return {
25756
25776
  ...props.thumbStyle,
25757
25777
  ...props.horizontalThumbStyle,
25758
- left: `${ scroll.horizontal.thumbStart.value }px`,
25778
+ [ proxy.$q.lang.rtl === true ? 'right' : 'left' ]: `${ scroll.horizontal.thumbStart.value }px`,
25759
25779
  width: `${ scroll.horizontal.thumbSize.value }px`
25760
25780
  }
25761
25781
  });
@@ -25949,6 +25969,15 @@
25949
25969
 
25950
25970
  let scrollPosition = null;
25951
25971
 
25972
+ vue.watch(() => proxy.$q.lang.rtl, rtl => {
25973
+ if (targetRef.value !== null) {
25974
+ setHorizontalScrollPosition(
25975
+ targetRef.value,
25976
+ Math.abs(scroll.horizontal.position.value) * (rtl === true ? -1 : 1)
25977
+ );
25978
+ }
25979
+ });
25980
+
25952
25981
  vue.onDeactivated(() => {
25953
25982
  scrollPosition = {
25954
25983
  top: scroll.vertical.position.value,
@@ -25985,7 +26014,9 @@
25985
26014
  setScrollPercentage (axis, percentage, duration) {
25986
26015
  localSetScrollPosition(
25987
26016
  axis,
25988
- percentage * (scroll[ axis ].size.value - container[ axis ].value),
26017
+ percentage
26018
+ * (scroll[ axis ].size.value - container[ axis ].value)
26019
+ * (axis === 'horizontal' && proxy.$q.lang.rtl === true ? -1 : 1),
25989
26020
  duration
25990
26021
  );
25991
26022
  }
@@ -26734,7 +26765,7 @@
26734
26765
 
26735
26766
  function emitScroll (index) {
26736
26767
  if (prevToIndex !== index) {
26737
- props.onVirtualScroll !== void 0 && emit('virtual-scroll', {
26768
+ props.onVirtualScroll !== void 0 && emit('virtualScroll', {
26738
26769
  index,
26739
26770
  from: virtualScrollSliceRange.value.from,
26740
26771
  to: virtualScrollSliceRange.value.to - 1,
@@ -26906,9 +26937,9 @@
26906
26937
 
26907
26938
  emits: [
26908
26939
  ...useFieldEmits,
26909
- 'add', 'remove', 'input-value', 'new-value',
26940
+ 'add', 'remove', 'inputValue', 'newValue',
26910
26941
  'keyup', 'keypress', 'keydown',
26911
- 'filter-abort'
26942
+ 'filterAbort'
26912
26943
  ],
26913
26944
 
26914
26945
  setup (props, { slots, emit }) {
@@ -27030,6 +27061,11 @@
27030
27061
  .join(', ')
27031
27062
  );
27032
27063
 
27064
+ const ariaCurrentValue = vue.computed(() => (props.displayValue !== void 0
27065
+ ? props.displayValue
27066
+ : selectedString.value
27067
+ ));
27068
+
27033
27069
  const needsHtmlFn = vue.computed(() => (
27034
27070
  props.optionsHtml === true
27035
27071
  ? () => true
@@ -27055,20 +27091,9 @@
27055
27091
  'aria-readonly': props.readonly === true ? 'true' : 'false',
27056
27092
  'aria-autocomplete': props.useInput === true ? 'list' : 'none',
27057
27093
  'aria-expanded': menu.value === true ? 'true' : 'false',
27058
- 'aria-owns': `${ state.targetUid.value }_lb`,
27059
27094
  'aria-controls': `${ state.targetUid.value }_lb`
27060
27095
  };
27061
27096
 
27062
- return attrs
27063
- });
27064
-
27065
- const listboxAttrs = vue.computed(() => {
27066
- const attrs = {
27067
- id: `${ state.targetUid.value }_lb`,
27068
- role: 'listbox',
27069
- 'aria-multiselectable': props.multiple === true ? 'true' : 'false'
27070
- };
27071
-
27072
27097
  if (optionIndex.value >= 0) {
27073
27098
  attrs[ 'aria-activedescendant' ] = `${ state.targetUid.value }_${ optionIndex.value }`;
27074
27099
  }
@@ -27076,6 +27101,12 @@
27076
27101
  return attrs
27077
27102
  });
27078
27103
 
27104
+ const listboxAttrs = vue.computed(() => ({
27105
+ id: `${ state.targetUid.value }_lb`,
27106
+ role: 'listbox',
27107
+ 'aria-multiselectable': props.multiple === true ? 'true' : 'false'
27108
+ }));
27109
+
27079
27110
  const selectedScope = vue.computed(() => {
27080
27111
  return innerValue.value.map((opt, i) => ({
27081
27112
  index: i,
@@ -27571,7 +27602,9 @@
27571
27602
  && props.useInput !== true
27572
27603
  && e.key !== void 0
27573
27604
  && e.key.length === 1 // printable char
27574
- && e.altKey === e.ctrlKey // not kbd shortcut
27605
+ && e.altKey === false // not kbd shortcut
27606
+ && e.ctrlKey === false // not kbd shortcut
27607
+ && e.metaKey === false // not kbd shortcut, especially on macOS with Command key
27575
27608
  && (e.keyCode !== 32 || searchBuffer.length > 0) // space in middle of search
27576
27609
  ) {
27577
27610
  menu.value !== true && showPopup(e);
@@ -27656,7 +27689,7 @@
27656
27689
  };
27657
27690
 
27658
27691
  if (props.onNewValue !== void 0) {
27659
- emit('new-value', inputValue.value, done);
27692
+ emit('newValue', inputValue.value, done);
27660
27693
  }
27661
27694
  else {
27662
27695
  done(inputValue.value);
@@ -27679,8 +27712,8 @@
27679
27712
  return hasDialog === true
27680
27713
  ? menuContentRef.value
27681
27714
  : (
27682
- menuRef.value !== null && menuRef.value.__qPortalInnerRef.value !== null
27683
- ? menuRef.value.__qPortalInnerRef.value
27715
+ menuRef.value !== null && menuRef.value.contentEl !== null
27716
+ ? menuRef.value.contentEl
27684
27717
  : void 0
27685
27718
  )
27686
27719
  }
@@ -27718,9 +27751,7 @@
27718
27751
 
27719
27752
  return [
27720
27753
  vue.h('span', {
27721
- [ valueAsHtml.value === true ? 'innerHTML' : 'textContent' ]: props.displayValue !== void 0
27722
- ? props.displayValue
27723
- : selectedString.value
27754
+ [ valueAsHtml.value === true ? 'innerHTML' : 'textContent' ]: ariaCurrentValue.value
27724
27755
  })
27725
27756
  ]
27726
27757
  }
@@ -27775,7 +27806,7 @@
27775
27806
  id: isTarget === true ? state.targetUid.value : void 0,
27776
27807
  maxlength: props.maxlength,
27777
27808
  autocomplete: props.autocomplete,
27778
- 'data-autofocus': (fromDialog !== true && props.autofocus === true) || void 0,
27809
+ 'data-autofocus': fromDialog === true || props.autofocus === true || void 0,
27779
27810
  disabled: props.disable === true,
27780
27811
  readonly: props.readonly === true,
27781
27812
  ...inputControlEvents.value
@@ -27823,7 +27854,7 @@
27823
27854
  function setInputValue (val) {
27824
27855
  if (inputValue.value !== val) {
27825
27856
  inputValue.value = val;
27826
- emit('input-value', val);
27857
+ emit('inputValue', val);
27827
27858
  }
27828
27859
  }
27829
27860
 
@@ -27847,7 +27878,7 @@
27847
27878
  }
27848
27879
 
27849
27880
  if (state.innerLoading.value === true) {
27850
- emit('filter-abort');
27881
+ emit('filterAbort');
27851
27882
  }
27852
27883
  else {
27853
27884
  state.innerLoading.value = true;
@@ -28064,7 +28095,7 @@
28064
28095
  filterId = void 0;
28065
28096
 
28066
28097
  if (state.innerLoading.value === true) {
28067
- emit('filter-abort');
28098
+ emit('filterAbort');
28068
28099
  state.innerLoading.value = false;
28069
28100
  innerLoadingIndicator.value = false;
28070
28101
  }
@@ -28150,14 +28181,14 @@
28150
28181
 
28151
28182
  function onControlPopupShow (e) {
28152
28183
  e !== void 0 && stop(e);
28153
- emit('popup-show', e);
28184
+ emit('popupShow', e);
28154
28185
  state.hasPopupOpen = true;
28155
28186
  state.onControlFocusin(e);
28156
28187
  }
28157
28188
 
28158
28189
  function onControlPopupHide (e) {
28159
28190
  e !== void 0 && stop(e);
28160
- emit('popup-hide', e);
28191
+ emit('popupHide', e);
28161
28192
  state.hasPopupOpen = false;
28162
28193
  state.onControlFocusout(e);
28163
28194
  }
@@ -28275,8 +28306,9 @@
28275
28306
  key: 'd_t',
28276
28307
  class: 'q-select__focus-target',
28277
28308
  id: isTarget === true ? state.targetUid.value : void 0,
28309
+ value: ariaCurrentValue.value,
28278
28310
  readonly: true,
28279
- 'data-autofocus': (fromDialog !== true && props.autofocus === true) || void 0,
28311
+ 'data-autofocus': fromDialog === true || props.autofocus === true || void 0,
28280
28312
  ...attrs,
28281
28313
  onKeydown: onTargetKeydown,
28282
28314
  onKeyup: onTargetKeyup,
@@ -32148,7 +32180,7 @@
32148
32180
  },
32149
32181
 
32150
32182
  emits: [
32151
- 'request', 'virtual-scroll',
32183
+ 'request', 'virtualScroll',
32152
32184
  ...useFullscreenEmits,
32153
32185
  ...useTableRowExpandEmits,
32154
32186
  ...useTableRowSelectionEmits
@@ -32382,7 +32414,7 @@
32382
32414
 
32383
32415
  scrollTarget.scrollTop = offsetTop;
32384
32416
 
32385
- emit('virtual-scroll', {
32417
+ emit('virtualScroll', {
32386
32418
  index: toIndex,
32387
32419
  from: 0,
32388
32420
  to: innerPagination.value.rowsPerPage - 1,
@@ -32392,7 +32424,7 @@
32392
32424
  }
32393
32425
 
32394
32426
  function onVScroll (info) {
32395
- emit('virtual-scroll', info);
32427
+ emit('virtualScroll', info);
32396
32428
  }
32397
32429
 
32398
32430
  function getProgress () {
@@ -34320,9 +34352,9 @@
34320
34352
  'update:expanded',
34321
34353
  'update:ticked',
34322
34354
  'update:selected',
34323
- 'lazy-load',
34324
- 'after-show',
34325
- 'after-hide'
34355
+ 'lazyLoad',
34356
+ 'afterShow',
34357
+ 'afterHide'
34326
34358
  ],
34327
34359
 
34328
34360
  setup (props, { slots, emit }) {
@@ -34571,7 +34603,7 @@
34571
34603
  if (Array.isArray(node[ props.childrenKey ]) !== true) {
34572
34604
  node[ props.childrenKey ] = [];
34573
34605
  }
34574
- emit('lazy-load', {
34606
+ emit('lazyLoad', {
34575
34607
  node,
34576
34608
  key,
34577
34609
  done: children => {
@@ -34718,11 +34750,11 @@
34718
34750
  }
34719
34751
 
34720
34752
  function onShow () {
34721
- emit('after-show');
34753
+ emit('afterShow');
34722
34754
  }
34723
34755
 
34724
34756
  function onHide () {
34725
- emit('after-hide');
34757
+ emit('afterHide');
34726
34758
  }
34727
34759
 
34728
34760
  function getNode (node) {
@@ -35565,7 +35597,7 @@
35565
35597
  helpers.queuedFiles.value = helpers.queuedFiles.value.concat(files);
35566
35598
  files.forEach(f => { helpers.updateFileStatus(f, 'failed'); });
35567
35599
 
35568
- emit('factory-failed', err, files);
35600
+ emit('factoryFailed', err, files);
35569
35601
  workingThreads.value--;
35570
35602
  }
35571
35603
  };
@@ -38083,8 +38115,7 @@
38083
38115
  tabindex: 0,
38084
38116
  clickable: true,
38085
38117
  dark: isDark.value,
38086
- onClick () { onOk(action); },
38087
- onKeyup (e) { e.keyCode === 13 && onOk(action); }
38118
+ onClick () { onOk(action); }
38088
38119
  }, () => [
38089
38120
  vue.h(
38090
38121
  QItemSection,
@@ -38713,12 +38744,12 @@
38713
38744
  function getPrompt () {
38714
38745
  return [
38715
38746
  vue.h(QInput, {
38716
- modelValue: model.value,
38717
- ...formProps.value,
38718
38747
  color: vmColor.value,
38719
38748
  dense: true,
38720
38749
  autofocus: true,
38721
38750
  dark: isDark.value,
38751
+ ...formProps.value,
38752
+ modelValue: model.value,
38722
38753
  'onUpdate:modelValue': onUpdateModel,
38723
38754
  onKeyup: onInputKeyup
38724
38755
  })
@@ -38728,11 +38759,11 @@
38728
38759
  function getOptions () {
38729
38760
  return [
38730
38761
  vue.h(QOptionGroup, {
38731
- modelValue: model.value,
38732
- ...formProps.value,
38733
38762
  color: vmColor.value,
38734
38763
  options: props.options.items,
38735
38764
  dark: isDark.value,
38765
+ ...formProps.value,
38766
+ modelValue: model.value,
38736
38767
  'onUpdate:modelValue': onUpdateModel
38737
38768
  })
38738
38769
  ]
@@ -40475,7 +40506,7 @@
40475
40506
  */
40476
40507
 
40477
40508
  var index_umd = {
40478
- version: '2.10.0',
40509
+ version: '2.10.2',
40479
40510
  install (app, opts) {
40480
40511
  installQuasar(app, {
40481
40512
  components,