quasar 2.17.7 → 2.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/dist/api/QBtnDropdown.json +1 -1
  2. package/dist/api/QDialog.json +1 -1
  3. package/dist/api/QMenu.json +1 -1
  4. package/dist/api/QSelect.json +1 -1
  5. package/dist/api/QTable.json +1 -1
  6. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  7. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  8. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  9. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  10. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  11. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  12. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  13. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  14. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  15. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  16. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  17. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  18. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  19. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  20. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  21. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  22. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  23. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  24. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  25. package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
  26. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
  40. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
  41. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  42. package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
  43. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  44. package/dist/icon-set/themify.umd.prod.js +1 -1
  45. package/dist/lang/ar-TN.umd.prod.js +2 -2
  46. package/dist/lang/ar.umd.prod.js +2 -2
  47. package/dist/lang/az-Latn.umd.prod.js +2 -2
  48. package/dist/lang/bg.umd.prod.js +2 -2
  49. package/dist/lang/bn.umd.prod.js +2 -2
  50. package/dist/lang/bs-BA.umd.prod.js +2 -2
  51. package/dist/lang/ca.umd.prod.js +2 -2
  52. package/dist/lang/cs.umd.prod.js +2 -2
  53. package/dist/lang/da.umd.prod.js +2 -2
  54. package/dist/lang/de-CH.umd.prod.js +2 -2
  55. package/dist/lang/de-DE.umd.prod.js +2 -2
  56. package/dist/lang/de.umd.prod.js +2 -2
  57. package/dist/lang/el.umd.prod.js +2 -2
  58. package/dist/lang/en-GB.umd.prod.js +2 -2
  59. package/dist/lang/en-US.umd.prod.js +2 -2
  60. package/dist/lang/eo.umd.prod.js +2 -2
  61. package/dist/lang/es.umd.prod.js +2 -2
  62. package/dist/lang/et.umd.prod.js +2 -2
  63. package/dist/lang/eu.umd.prod.js +2 -2
  64. package/dist/lang/fa-IR.umd.prod.js +2 -2
  65. package/dist/lang/fa.umd.prod.js +2 -2
  66. package/dist/lang/fi.umd.prod.js +2 -2
  67. package/dist/lang/fr.umd.prod.js +2 -2
  68. package/dist/lang/gn.umd.prod.js +2 -2
  69. package/dist/lang/he.umd.prod.js +2 -2
  70. package/dist/lang/hi.umd.prod.js +2 -2
  71. package/dist/lang/hr.umd.prod.js +2 -2
  72. package/dist/lang/hu.umd.prod.js +2 -2
  73. package/dist/lang/id.umd.prod.js +2 -2
  74. package/dist/lang/is.umd.prod.js +2 -2
  75. package/dist/lang/it.umd.prod.js +2 -2
  76. package/dist/lang/ja.umd.prod.js +2 -2
  77. package/dist/lang/kk.umd.prod.js +2 -2
  78. package/dist/lang/km.umd.prod.js +2 -2
  79. package/dist/lang/ko-KR.umd.prod.js +2 -2
  80. package/dist/lang/kur-CKB.umd.prod.js +2 -2
  81. package/dist/lang/lt.umd.prod.js +2 -2
  82. package/dist/lang/lu.umd.prod.js +2 -2
  83. package/dist/lang/lv.umd.prod.js +2 -2
  84. package/dist/lang/mk.umd.prod.js +2 -2
  85. package/dist/lang/ml.umd.prod.js +2 -2
  86. package/dist/lang/mm.umd.prod.js +2 -2
  87. package/dist/lang/ms-MY.umd.prod.js +2 -2
  88. package/dist/lang/ms.umd.prod.js +2 -2
  89. package/dist/lang/my.umd.prod.js +2 -2
  90. package/dist/lang/nb-NO.umd.prod.js +2 -2
  91. package/dist/lang/nl.umd.prod.js +2 -2
  92. package/dist/lang/pl.umd.prod.js +2 -2
  93. package/dist/lang/pt-BR.umd.prod.js +2 -2
  94. package/dist/lang/pt.umd.prod.js +2 -2
  95. package/dist/lang/ro.umd.prod.js +2 -2
  96. package/dist/lang/ru.umd.prod.js +2 -2
  97. package/dist/lang/sk.umd.prod.js +2 -2
  98. package/dist/lang/sl.umd.prod.js +2 -2
  99. package/dist/lang/sm.umd.prod.js +2 -2
  100. package/dist/lang/sr-CYR.umd.prod.js +2 -2
  101. package/dist/lang/sr.umd.prod.js +2 -2
  102. package/dist/lang/sv.umd.prod.js +2 -2
  103. package/dist/lang/ta.umd.prod.js +2 -2
  104. package/dist/lang/th.umd.prod.js +2 -2
  105. package/dist/lang/tl.umd.prod.js +2 -2
  106. package/dist/lang/tr.umd.prod.js +2 -2
  107. package/dist/lang/ug.umd.prod.js +1 -1
  108. package/dist/lang/uk.umd.prod.js +2 -2
  109. package/dist/lang/ur-PK.umd.prod.js +7 -0
  110. package/dist/lang/uz-Cyrl.umd.prod.js +2 -2
  111. package/dist/lang/uz-Latn.umd.prod.js +2 -2
  112. package/dist/lang/vi.umd.prod.js +2 -2
  113. package/dist/lang/zh-CN.umd.prod.js +2 -2
  114. package/dist/lang/zh-TW.umd.prod.js +2 -2
  115. package/dist/quasar.client.js +237 -174
  116. package/dist/quasar.css +1 -1
  117. package/dist/quasar.prod.css +1 -1
  118. package/dist/quasar.rtl.css +1 -1
  119. package/dist/quasar.rtl.prod.css +1 -1
  120. package/dist/quasar.sass +2 -2
  121. package/dist/quasar.server.prod.cjs +15 -15
  122. package/dist/quasar.server.prod.js +8 -8
  123. package/dist/quasar.umd.js +237 -174
  124. package/dist/quasar.umd.prod.js +15 -15
  125. package/dist/types/index.d.ts +52 -3
  126. package/dist/vetur/quasar-attributes.json +1 -1
  127. package/dist/vetur/quasar-tags.json +1 -1
  128. package/dist/web-types/web-types.json +1 -1
  129. package/lang/ar-TN.js +6 -0
  130. package/lang/ar.js +6 -0
  131. package/lang/az-Latn.js +6 -0
  132. package/lang/bg.js +6 -0
  133. package/lang/bn.js +6 -0
  134. package/lang/bs-BA.js +6 -0
  135. package/lang/ca.js +6 -0
  136. package/lang/cs.js +6 -0
  137. package/lang/da.js +6 -0
  138. package/lang/de-CH.js +6 -0
  139. package/lang/de-DE.js +6 -0
  140. package/lang/de.js +6 -0
  141. package/lang/el.js +6 -0
  142. package/lang/en-GB.js +6 -0
  143. package/lang/en-US.js +6 -0
  144. package/lang/eo.js +6 -0
  145. package/lang/es.js +6 -0
  146. package/lang/et.js +6 -0
  147. package/lang/eu.js +6 -0
  148. package/lang/fa-IR.js +6 -0
  149. package/lang/fa.js +6 -0
  150. package/lang/fi.js +6 -0
  151. package/lang/fr.js +6 -0
  152. package/lang/gn.js +6 -0
  153. package/lang/he.js +6 -0
  154. package/lang/hi.js +6 -0
  155. package/lang/hr.js +6 -0
  156. package/lang/hu.js +6 -0
  157. package/lang/id.js +6 -0
  158. package/lang/index.json +1 -1
  159. package/lang/is.js +6 -0
  160. package/lang/it.js +6 -0
  161. package/lang/ja.js +6 -0
  162. package/lang/kk.js +6 -0
  163. package/lang/km.js +6 -0
  164. package/lang/ko-KR.js +6 -0
  165. package/lang/kur-CKB.js +6 -0
  166. package/lang/lt.js +6 -0
  167. package/lang/lu.js +6 -0
  168. package/lang/lv.js +6 -0
  169. package/lang/mk.js +6 -0
  170. package/lang/ml.js +6 -0
  171. package/lang/mm.js +6 -0
  172. package/lang/ms-MY.js +6 -0
  173. package/lang/ms.js +6 -0
  174. package/lang/my.js +6 -0
  175. package/lang/nb-NO.js +6 -0
  176. package/lang/nl.js +6 -0
  177. package/lang/pl.js +6 -0
  178. package/lang/pt-BR.js +6 -0
  179. package/lang/pt.js +6 -0
  180. package/lang/ro.js +6 -0
  181. package/lang/ru.js +6 -0
  182. package/lang/sk.js +6 -0
  183. package/lang/sl.js +6 -0
  184. package/lang/sm.js +6 -0
  185. package/lang/sr-CYR.js +6 -0
  186. package/lang/sr.js +6 -0
  187. package/lang/sv.js +6 -0
  188. package/lang/ta.js +6 -0
  189. package/lang/th.js +6 -0
  190. package/lang/tl.js +6 -0
  191. package/lang/tr.js +6 -0
  192. package/lang/uk.js +6 -0
  193. package/lang/ur-PK.js +111 -0
  194. package/lang/uz-Cyrl.js +6 -0
  195. package/lang/uz-Latn.js +6 -0
  196. package/lang/vi.js +6 -0
  197. package/lang/zh-CN.js +6 -0
  198. package/lang/zh-TW.js +6 -0
  199. package/package.json +3 -3
  200. package/src/components/breadcrumbs/QBreadcrumbs.js +2 -2
  201. package/src/components/btn/QBtn.js +7 -8
  202. package/src/components/btn-dropdown/QBtnDropdown.js +10 -4
  203. package/src/components/btn-dropdown/QBtnDropdown.json +21 -0
  204. package/src/components/color/QColor.js +1 -1
  205. package/src/components/date/QDate.js +1 -1
  206. package/src/components/dialog/QDialog.js +2 -2
  207. package/src/components/dialog/QDialog.json +1 -1
  208. package/src/components/drawer/QDrawer.js +3 -5
  209. package/src/components/editor/QEditor.js +1 -1
  210. package/src/components/editor/editor-caret.js +1 -1
  211. package/src/components/editor/editor-utils.js +2 -2
  212. package/src/components/expansion-item/QExpansionItem.js +6 -3
  213. package/src/components/fab/QFab.js +2 -2
  214. package/src/components/form/QForm.js +2 -2
  215. package/src/components/form/QFormChildMixin.js +6 -4
  216. package/src/components/icon/QIcon.js +2 -2
  217. package/src/components/infinite-scroll/QInfiniteScroll.js +2 -4
  218. package/src/components/input/QInput.js +3 -3
  219. package/src/components/item/QItem.js +1 -1
  220. package/src/components/menu/QMenu.js +8 -5
  221. package/src/components/menu/QMenu.json +8 -1
  222. package/src/components/pagination/QPagination.js +8 -4
  223. package/src/components/parallax/QParallax.js +1 -1
  224. package/src/components/popup-edit/QPopupEdit.js +2 -2
  225. package/src/components/pull-to-refresh/QPullToRefresh.js +1 -1
  226. package/src/components/rating/QRating.sass +1 -1
  227. package/src/components/resize-observer/QResizeObserver.js +1 -1
  228. package/src/components/scroll-observer/QScrollObserver.js +2 -2
  229. package/src/components/select/QSelect.js +8 -6
  230. package/src/components/select/QSelect.json +1 -1
  231. package/src/components/slide-transition/QSlideTransition.js +2 -2
  232. package/src/components/stepper/StepHeader.js +1 -1
  233. package/src/components/table/QTable.js +77 -36
  234. package/src/components/table/QTable.json +98 -0
  235. package/src/components/table/QTr.js +4 -1
  236. package/src/components/table/table-sort.js +1 -1
  237. package/src/components/tabs/QTabs.js +2 -2
  238. package/src/components/tabs/use-tab.js +4 -4
  239. package/src/components/time/QTime.js +1 -1
  240. package/src/components/tree/QTree.js +2 -3
  241. package/src/components/virtual-scroll/use-virtual-scroll.js +3 -3
  242. package/src/composables/private.use-field/use-field.js +5 -5
  243. package/src/composables/private.use-file/use-file.js +6 -3
  244. package/src/composables/private.use-model-toggle/use-model-toggle.js +2 -2
  245. package/src/composables/private.use-refocus-target/use-refocus-target.js +6 -5
  246. package/src/composables/private.use-validate/use-validate.js +1 -1
  247. package/src/directives/intersection/Intersection.js +2 -2
  248. package/src/directives/morph/Morph.js +2 -2
  249. package/src/directives/mutation/Mutation.js +2 -2
  250. package/src/directives/touch-hold/TouchHold.js +2 -2
  251. package/src/directives/touch-pan/TouchPan.js +2 -2
  252. package/src/directives/touch-repeat/TouchRepeat.js +3 -3
  253. package/src/directives/touch-swipe/TouchSwipe.js +3 -3
  254. package/src/plugins/lang/Lang.test.js +12 -0
  255. package/src/plugins/loading/Loading.js +1 -1
  256. package/src/plugins/notify/Notify.js +1 -1
  257. package/src/plugins/private.body/Body.js +1 -1
  258. package/src/plugins/private.history/History.js +1 -1
  259. package/src/plugins/screen/Screen.js +1 -1
  260. package/src/utils/morph/morph.js +13 -10
  261. package/src/utils/open-url/open-url.js +3 -3
  262. package/src/utils/private.dialog/create-dialog.js +2 -2
  263. package/src/utils/private.portal/portal.js +1 -1
  264. package/src/components/date/__tests__/QDate.cy.js +0 -189
  265. package/src/components/date/__tests__/use-datetime.cy.js +0 -83
  266. package/src/components/editor/__tests__/QEditor.cy.js +0 -195
  267. package/src/components/field/__tests__/QField.cy.js +0 -156
  268. package/src/components/input/__tests__/QInput.cy.js +0 -786
  269. package/src/components/input/__tests__/use-mask.cy.js +0 -124
  270. package/src/components/menu/__tests__/QMenu.cy.js +0 -634
  271. package/src/components/menu/__tests__/WrapperOne.vue +0 -51
  272. package/src/components/menu/__tests__/WrapperTwo.vue +0 -38
  273. package/src/components/select/__tests__/QSelect.cy.js +0 -2018
  274. package/src/components/table/__tests__/QTable.cy.js +0 -635
  275. package/src/components/table/__tests__/QTd.cy.js +0 -35
  276. package/src/components/table/__tests__/QTh.cy.js +0 -27
  277. package/src/components/table/__tests__/QTr.cy.js +0 -27
  278. package/src/components/tabs/__tests__/QTab.cy.js +0 -79
  279. package/src/components/tabs/__tests__/QTabs.cy.js +0 -147
  280. package/src/components/uploader/__tests__/QUploader.cy.js +0 -191
  281. package/src/composables/__tests__/FieldWrapper.vue +0 -54
  282. package/src/composables/__tests__/use-anchor.cy.js +0 -98
  283. package/src/composables/__tests__/use-field.cy.js +0 -547
  284. package/src/composables/__tests__/use-file.cy.js +0 -69
  285. package/src/composables/__tests__/use-fullscreen.cy.js +0 -37
  286. package/src/composables/__tests__/use-model-toggle.cy.js +0 -350
  287. package/src/composables/__tests__/use-portal.cy.js +0 -4
  288. package/src/composables/__tests__/use-router-link.cy.js +0 -55
  289. package/src/composables/__tests__/use-validate.cy.js +0 -257
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.17.7
2
+ * Quasar Framework v2.18.0
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -504,7 +504,7 @@ var Screen_default = createReactivePlugin({
504
504
  visualViewport.width * visualViewport.scale + window.innerWidth - scrollingElement.clientWidth,
505
505
  visualViewport.height * visualViewport.scale + window.innerHeight - scrollingElement.clientHeight
506
506
  ];
507
- const classes = $q.config.screen !== void 0 && $q.config.screen.bodyClasses === true;
507
+ const classes = $q.config.screen?.bodyClasses === true;
508
508
  this.__update = (force) => {
509
509
  const [w, h138] = getSize();
510
510
  if (h138 !== this.height) {
@@ -742,7 +742,7 @@ var Body_default = {
742
742
  if (false) {
743
743
  const { $q, ssrContext } = opts;
744
744
  const cls = getBodyClasses($q.platform, $q.config);
745
- if ($q.config.screen !== void 0 && $q.config.screen.bodyClass === true) {
745
+ if ($q.config.screen?.bodyClass === true) {
746
746
  cls.push("screen--xs");
747
747
  }
748
748
  ssrContext._meta.bodyClasses += cls.join(" ");
@@ -802,7 +802,7 @@ var History_default = {
802
802
  const { cordova: cordova2, capacitor } = client.is;
803
803
  if (cordova2 !== true && capacitor !== true) return;
804
804
  const qConf = $q.config[cordova2 === true ? "cordova" : "capacitor"];
805
- if (qConf !== void 0 && qConf.backButton === false) return;
805
+ if (qConf?.backButton === false) return;
806
806
  if (
807
807
  // if we're on Capacitor mode
808
808
  capacitor === true && (window.Capacitor === void 0 || window.Capacitor.Plugins.App === void 0)
@@ -889,6 +889,12 @@ var en_US_default = {
889
889
  pagination: (start, end, total) => start + "-" + end + " of " + total,
890
890
  columns: "Columns"
891
891
  },
892
+ pagination: {
893
+ first: "First page",
894
+ prev: "Previous page",
895
+ next: "Next page",
896
+ last: "Last page"
897
+ },
892
898
  editor: {
893
899
  url: "URL",
894
900
  bold: "Bold",
@@ -1392,7 +1398,7 @@ function prepareApp(app2, uiOpts, pluginOpts) {
1392
1398
  }
1393
1399
  var install_quasar_default = false ? function(parentApp, opts = {}, ssrContext) {
1394
1400
  const $q = {
1395
- version: "2.17.7",
1401
+ version: "2.18.0",
1396
1402
  config: opts.config || {}
1397
1403
  };
1398
1404
  Object.assign(ssrContext, {
@@ -1422,7 +1428,7 @@ var install_quasar_default = false ? function(parentApp, opts = {}, ssrContext)
1422
1428
  ssrContext
1423
1429
  });
1424
1430
  } : function(parentApp, opts = {}) {
1425
- const $q = { version: "2.17.7" };
1431
+ const $q = { version: "2.18.0" };
1426
1432
  if (globalConfigIsFrozen === false) {
1427
1433
  if (opts.config !== void 0) {
1428
1434
  Object.assign(globalConfig, opts.config);
@@ -1764,7 +1770,9 @@ var libMap = {
1764
1770
  "ion-logo": ionFn,
1765
1771
  "iconfont ": sameFn,
1766
1772
  "ti-": (i) => `themify-icon ${i}`,
1767
- "bi-": (i) => `bootstrap-icons ${i}`
1773
+ "bi-": (i) => `bootstrap-icons ${i}`,
1774
+ "i-": sameFn
1775
+ // UnoCSS pure icons
1768
1776
  };
1769
1777
  var matMap = {
1770
1778
  o_: "-outlined",
@@ -1884,8 +1892,7 @@ var QIcon_default = createComponent({
1884
1892
  const data = {
1885
1893
  class: classes.value,
1886
1894
  style: sizeStyle.value,
1887
- "aria-hidden": "true",
1888
- role: "presentation"
1895
+ "aria-hidden": "true"
1889
1896
  };
1890
1897
  if (type.value.none === true) {
1891
1898
  return h3(props4.tag, data, hSlot(slots.default));
@@ -2166,9 +2173,9 @@ var QBreadcrumbs_default = createComponent({
2166
2173
  );
2167
2174
  if (vnodes.length === 0) return;
2168
2175
  let els = 1;
2169
- const child = [], len = vnodes.filter((c) => c.type !== void 0 && c.type.name === "QBreadcrumbsEl").length, separator = slots.separator !== void 0 ? slots.separator : () => props4.separator;
2176
+ const child = [], len = vnodes.filter((c) => c.type?.name === "QBreadcrumbsEl").length, separator = slots.separator !== void 0 ? slots.separator : () => props4.separator;
2170
2177
  vnodes.forEach((comp) => {
2171
- if (comp.type !== void 0 && comp.type.name === "QBreadcrumbsEl") {
2178
+ if (comp.type?.name === "QBreadcrumbsEl") {
2172
2179
  const middle = els < len;
2173
2180
  const disabled = comp.props !== null && disabledValues.includes(comp.props.disable);
2174
2181
  const cls = (middle === true ? "" : " q-breadcrumbs--last") + (disabled !== true && middle === true ? activeClass.value : "");
@@ -2894,11 +2901,11 @@ var QBtn_default = createComponent({
2894
2901
  if (e.defaultPrevented === true) return;
2895
2902
  const el = document.activeElement;
2896
2903
  if (props4.type === "submit" && el !== document.body && rootRef.value.contains(el) === false && el.contains(rootRef.value) === false) {
2897
- rootRef.value.focus();
2904
+ e.qAvoidFocus !== true && rootRef.value.focus();
2898
2905
  const onClickCleanup = () => {
2899
2906
  document.removeEventListener("keydown", stopAndPrevent, true);
2900
2907
  document.removeEventListener("keyup", onClickCleanup, passiveCapture);
2901
- rootRef.value !== null && rootRef.value.removeEventListener("blur", onClickCleanup, passiveCapture);
2908
+ rootRef.value?.removeEventListener("blur", onClickCleanup, passiveCapture);
2902
2909
  };
2903
2910
  document.addEventListener("keydown", stopAndPrevent, true);
2904
2911
  document.addEventListener("keyup", onClickCleanup, passiveCapture);
@@ -2913,7 +2920,7 @@ var QBtn_default = createComponent({
2913
2920
  if (isKeyCode(e, [13, 32]) === true && keyboardTarget !== rootRef.value) {
2914
2921
  keyboardTarget !== null && cleanup();
2915
2922
  if (e.defaultPrevented !== true) {
2916
- rootRef.value.focus();
2923
+ e.qAvoidFocus !== true && rootRef.value.focus();
2917
2924
  keyboardTarget = rootRef.value;
2918
2925
  rootRef.value.classList.add("q-btn--active");
2919
2926
  document.addEventListener("keyup", onPressEnd, true);
@@ -2953,8 +2960,8 @@ var QBtn_default = createComponent({
2953
2960
  }
2954
2961
  function onPressEnd(e) {
2955
2962
  if (rootRef.value === null) return;
2956
- if (e !== void 0 && e.type === "blur" && document.activeElement === rootRef.value) return;
2957
- if (e !== void 0 && e.type === "keyup") {
2963
+ if (e?.type === "blur" && document.activeElement === rootRef.value) return;
2964
+ if (e?.type === "keyup") {
2958
2965
  if (keyboardTarget === rootRef.value && isKeyCode(e, [13, 32]) === true) {
2959
2966
  const evt = new MouseEvent("click", e);
2960
2967
  evt.qKeyEvent = true;
@@ -2987,10 +2994,10 @@ var QBtn_default = createComponent({
2987
2994
  }
2988
2995
  if (keyboardTarget === rootRef.value) {
2989
2996
  document.removeEventListener("keyup", onPressEnd, true);
2990
- rootRef.value !== null && rootRef.value.removeEventListener("blur", onPressEnd, passiveCapture);
2997
+ rootRef.value?.removeEventListener("blur", onPressEnd, passiveCapture);
2991
2998
  keyboardTarget = null;
2992
2999
  }
2993
- rootRef.value !== null && rootRef.value.classList.remove("q-btn--active");
3000
+ rootRef.value?.classList.remove("q-btn--active");
2994
3001
  }
2995
3002
  function onLoadingEvt(evt) {
2996
3003
  stopAndPrevent(evt);
@@ -3370,7 +3377,7 @@ function use_model_toggle_default({
3370
3377
  }
3371
3378
  }
3372
3379
  function show(evt) {
3373
- if (props4.disable === true || evt !== void 0 && evt.qAnchorHandled === true || canShow !== void 0 && canShow(evt) !== true) return;
3380
+ if (props4.disable === true || evt?.qAnchorHandled === true || canShow !== void 0 && canShow(evt) !== true) return;
3374
3381
  const listener = props4["onUpdate:modelValue"] !== void 0;
3375
3382
  if (listener === true && true) {
3376
3383
  emit("update:modelValue", true);
@@ -3539,7 +3546,7 @@ function closePortalMenus(proxy, evt) {
3539
3546
  }
3540
3547
  } else if (proxy.__qPortal === true) {
3541
3548
  const parent = getParentProxy(proxy);
3542
- if (parent !== void 0 && parent.$options.name === "QPopupProxy") {
3549
+ if (parent?.$options.name === "QPopupProxy") {
3543
3550
  proxy.hide(evt);
3544
3551
  return parent;
3545
3552
  } else {
@@ -4251,6 +4258,7 @@ var QMenu_default = createComponent({
4251
4258
  persistent: Boolean,
4252
4259
  autoClose: Boolean,
4253
4260
  separateClosePopup: Boolean,
4261
+ noEscDismiss: Boolean,
4254
4262
  noRouteDismiss: Boolean,
4255
4263
  noRefocus: Boolean,
4256
4264
  noFocus: Boolean,
@@ -4400,7 +4408,7 @@ var QMenu_default = createComponent({
4400
4408
  anchorCleanup(true);
4401
4409
  if (refocusTarget !== null && // menu was hidden from code or ESC plugin
4402
4410
  (evt === void 0 || evt.qClickOutside !== true)) {
4403
- ((evt && evt.type.indexOf("key") === 0 ? refocusTarget.closest('[tabindex]:not([tabindex^="-"])') : void 0) || refocusTarget).focus();
4411
+ ((evt?.type.indexOf("key") === 0 ? refocusTarget.closest('[tabindex]:not([tabindex^="-"])') : void 0) || refocusTarget).focus();
4404
4412
  refocusTarget = null;
4405
4413
  }
4406
4414
  registerTimeout(() => {
@@ -4444,8 +4452,10 @@ var QMenu_default = createComponent({
4444
4452
  }
4445
4453
  }
4446
4454
  function onEscapeKey(evt) {
4447
- emit("escapeKey");
4448
- hide(evt);
4455
+ if (props4.noEscDismiss !== true) {
4456
+ emit("escapeKey");
4457
+ hide(evt);
4458
+ }
4449
4459
  }
4450
4460
  function updatePosition() {
4451
4461
  setPosition({
@@ -4580,8 +4590,11 @@ var QBtnDropdown_default = createComponent({
4580
4590
  contentStyle: [Array, String, Object],
4581
4591
  cover: Boolean,
4582
4592
  persistent: Boolean,
4593
+ noEscDismiss: Boolean,
4583
4594
  noRouteDismiss: Boolean,
4584
4595
  autoClose: Boolean,
4596
+ noRefocus: Boolean,
4597
+ noFocus: Boolean,
4585
4598
  menuAnchor: {
4586
4599
  type: String,
4587
4600
  default: "bottom end"
@@ -4620,7 +4633,7 @@ var QBtnDropdown_default = createComponent({
4620
4633
  const btnDesignAttr = computed20(() => getBtnDesignAttr(props4));
4621
4634
  const btnProps = computed20(() => passBtnProps(props4));
4622
4635
  watch6(() => props4.modelValue, (val) => {
4623
- menuRef.value !== null && menuRef.value[val ? "show" : "hide"]();
4636
+ menuRef.value?.[val ? "show" : "hide"]();
4624
4637
  });
4625
4638
  watch6(() => props4.split, hide);
4626
4639
  function onBeforeShow(e) {
@@ -4648,13 +4661,13 @@ var QBtnDropdown_default = createComponent({
4648
4661
  emit("click", e);
4649
4662
  }
4650
4663
  function toggle(evt) {
4651
- menuRef.value !== null && menuRef.value.toggle(evt);
4664
+ menuRef.value?.toggle(evt);
4652
4665
  }
4653
4666
  function show(evt) {
4654
- menuRef.value !== null && menuRef.value.show(evt);
4667
+ menuRef.value?.show(evt);
4655
4668
  }
4656
4669
  function hide(evt) {
4657
- menuRef.value !== null && menuRef.value.hide(evt);
4670
+ menuRef.value?.hide(evt);
4658
4671
  }
4659
4672
  Object.assign(proxy, {
4660
4673
  show,
@@ -4680,8 +4693,11 @@ var QBtnDropdown_default = createComponent({
4680
4693
  cover: props4.cover,
4681
4694
  fit: true,
4682
4695
  persistent: props4.persistent,
4696
+ noEscDismiss: props4.noEscDismiss,
4683
4697
  noRouteDismiss: props4.noRouteDismiss,
4684
4698
  autoClose: props4.autoClose,
4699
+ noFocus: props4.noFocus,
4700
+ noRefocus: props4.noRefocus,
4685
4701
  anchor: props4.menuAnchor,
4686
4702
  self: props4.menuSelf,
4687
4703
  offset: props4.menuOffset,
@@ -5138,8 +5154,8 @@ var TouchSwipe_default = createDirective(
5138
5154
  if (ctx.event === void 0) return;
5139
5155
  cleanEvt(ctx, "temp");
5140
5156
  client.is.firefox === true && preventDraggable(el, false);
5141
- ctx.styleCleanup !== void 0 && ctx.styleCleanup(true);
5142
- evt !== void 0 && ctx.event.dir !== false && stopAndPrevent(evt);
5157
+ ctx.styleCleanup?.(true);
5158
+ if (evt !== void 0 && ctx.event.dir !== false) stopAndPrevent(evt);
5143
5159
  ctx.event = void 0;
5144
5160
  }
5145
5161
  };
@@ -5172,7 +5188,7 @@ var TouchSwipe_default = createDirective(
5172
5188
  cleanEvt(ctx, "main");
5173
5189
  cleanEvt(ctx, "temp");
5174
5190
  client.is.firefox === true && preventDraggable(el, false);
5175
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
5191
+ ctx.styleCleanup?.();
5176
5192
  delete el.__qtouchswipe;
5177
5193
  }
5178
5194
  }
@@ -5901,11 +5917,12 @@ function use_refocus_target_default(props4, rootRef) {
5901
5917
  });
5902
5918
  function refocusTarget(e) {
5903
5919
  const root = rootRef.value;
5904
- if (e !== void 0 && e.type.indexOf("key") === 0) {
5905
- if (root !== null && document.activeElement !== root && root.contains(document.activeElement) === true) {
5920
+ if (e?.qAvoidFocus === true) return;
5921
+ if (e?.type.indexOf("key") === 0) {
5922
+ if (document.activeElement !== root && root?.contains(document.activeElement) === true) {
5906
5923
  root.focus();
5907
5924
  }
5908
- } else if (refocusRef.value !== null && (e === void 0 || root !== null && root.contains(e.target) === true)) {
5925
+ } else if (refocusRef.value !== null && (e === void 0 || root?.contains(e.target) === true)) {
5909
5926
  refocusRef.value.focus();
5910
5927
  }
5911
5928
  }
@@ -6659,7 +6676,7 @@ var TouchPan_default = createDirective(
6659
6676
  cleanEvt(ctx, "temp");
6660
6677
  client.is.firefox === true && preventDraggable(el, false);
6661
6678
  if (abort === true) {
6662
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
6679
+ ctx.styleCleanup?.();
6663
6680
  if (ctx.event.detected !== true && ctx.initialEvent !== void 0) {
6664
6681
  ctx.initialEvent.target.dispatchEvent(ctx.initialEvent.event);
6665
6682
  }
@@ -6710,7 +6727,7 @@ var TouchPan_default = createDirective(
6710
6727
  cleanEvt(ctx, "main");
6711
6728
  cleanEvt(ctx, "temp");
6712
6729
  client.is.firefox === true && preventDraggable(el, false);
6713
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
6730
+ ctx.styleCleanup?.();
6714
6731
  delete el.__qtouchpan;
6715
6732
  }
6716
6733
  }
@@ -7426,7 +7443,7 @@ var QResizeObserver_default = createComponent({
7426
7443
  }
7427
7444
  }, onObjLoad = function() {
7428
7445
  cleanup();
7429
- if (targetEl && targetEl.contentDocument) {
7446
+ if (targetEl?.contentDocument) {
7430
7447
  curDocView = targetEl.contentDocument.defaultView;
7431
7448
  curDocView.addEventListener("resize", trigger3, listenOpts.passive);
7432
7449
  emitEvent();
@@ -7748,7 +7765,7 @@ var QTabs_default = createComponent({
7748
7765
  }
7749
7766
  function updateActiveRoute() {
7750
7767
  let name2 = null, bestScore = { matchedLen: 0, queryDiff: 9999, hrefLen: 0 };
7751
- const list = tabDataList.filter((tab) => tab.routeData !== void 0 && tab.routeData.hasRouterLink.value === true);
7768
+ const list = tabDataList.filter((tab) => tab.routeData?.hasRouterLink.value === true);
7752
7769
  const { hash: currentHash, query: currentQuery } = proxy.$route;
7753
7770
  const currentQueryLen = Object.keys(currentQuery).length;
7754
7771
  for (const tab of list) {
@@ -7881,7 +7898,7 @@ var QTabs_default = createComponent({
7881
7898
  function cleanup() {
7882
7899
  animateTimer !== null && clearTimeout(animateTimer);
7883
7900
  stopAnimScroll();
7884
- unwatchRoute !== void 0 && unwatchRoute();
7901
+ unwatchRoute?.();
7885
7902
  }
7886
7903
  let hadRouteWatcher, hadActivated;
7887
7904
  onBeforeUnmount12(cleanup);
@@ -7979,11 +7996,11 @@ function use_tab_default(props4, slots, emit, routeData) {
7979
7996
  );
7980
7997
  const tabIndex = computed39(() => props4.disable === true || $tabs.hasFocus.value === true || isActive.value === false && $tabs.hasActiveTab.value === true ? -1 : props4.tabindex || 0);
7981
7998
  function onClick(e, keyboard) {
7982
- if (keyboard !== true && blurTargetRef.value !== null) {
7983
- blurTargetRef.value.focus();
7999
+ if (keyboard !== true && e?.qAvoidFocus !== true) {
8000
+ blurTargetRef.value?.focus();
7984
8001
  }
7985
8002
  if (props4.disable === true) {
7986
- if (routeData !== void 0 && routeData.hasRouterLink.value === true) {
8003
+ if (routeData?.hasRouterLink.value === true) {
7987
8004
  stopAndPrevent(e);
7988
8005
  }
7989
8006
  return;
@@ -8002,7 +8019,7 @@ function use_tab_default(props4, slots, emit, routeData) {
8002
8019
  }).then((softError) => {
8003
8020
  if (reqId === $tabs.avoidRouteWatcher) {
8004
8021
  $tabs.avoidRouteWatcher = false;
8005
- if (hardError === void 0 && (softError === void 0 || softError.message !== void 0 && softError.message.startsWith("Avoided redundant navigation") === true)) {
8022
+ if (hardError === void 0 && (softError === void 0 || softError.message?.startsWith("Avoided redundant navigation") === true)) {
8006
8023
  $tabs.updateModel({ name: props4.name });
8007
8024
  }
8008
8025
  }
@@ -8661,7 +8678,7 @@ var QColor_default = createComponent({
8661
8678
  model.value.v = hsv.v;
8662
8679
  }
8663
8680
  updateModel2(rgb2, change);
8664
- if (evt !== void 0 && change !== true && evt.target.selectionEnd !== void 0) {
8681
+ if (change !== true && evt?.target.selectionEnd !== void 0) {
8665
8682
  const index = evt.target.selectionEnd;
8666
8683
  nextTick5(() => {
8667
8684
  evt.target.setSelectionRange(index, index);
@@ -10727,7 +10744,7 @@ var QDate_default = createComponent({
10727
10744
  }
10728
10745
  function toggleDate(date, monthHash) {
10729
10746
  const month = daysMap.value[monthHash];
10730
- const fn = month !== void 0 && month.includes(date.day) === true ? removeFromModel : addToModel;
10747
+ const fn = month?.includes(date.day) === true ? removeFromModel : addToModel;
10731
10748
  fn(date);
10732
10749
  }
10733
10750
  function getShortDate(date) {
@@ -11499,7 +11516,7 @@ var QDialog_default = createComponent({
11499
11516
  showPortal();
11500
11517
  animating.value = true;
11501
11518
  if (props4.noFocus !== true) {
11502
- document.activeElement !== null && document.activeElement.blur();
11519
+ document.activeElement?.blur();
11503
11520
  registerTick(focus);
11504
11521
  } else {
11505
11522
  removeTick();
@@ -11532,7 +11549,7 @@ var QDialog_default = createComponent({
11532
11549
  animating.value = true;
11533
11550
  hidePortal();
11534
11551
  if (refocusTarget !== null) {
11535
- ((evt && evt.type.indexOf("key") === 0 ? refocusTarget.closest('[tabindex]:not([tabindex^="-"])') : void 0) || refocusTarget).focus();
11552
+ ((evt?.type.indexOf("key") === 0 ? refocusTarget.closest('[tabindex]:not([tabindex^="-"])') : void 0) || refocusTarget).focus();
11536
11553
  refocusTarget = null;
11537
11554
  }
11538
11555
  registerTimeout(() => {
@@ -11762,7 +11779,7 @@ var QDrawer_default = createComponent({
11762
11779
  applyPosition(0);
11763
11780
  if (belowBreakpoint.value === true) {
11764
11781
  const otherInstance = $layout.instances[otherSide.value];
11765
- if (otherInstance !== void 0 && otherInstance.belowBreakpoint === true) {
11782
+ if (otherInstance?.belowBreakpoint === true) {
11766
11783
  otherInstance.hide(false);
11767
11784
  }
11768
11785
  applyBackdrop(1);
@@ -12002,9 +12019,7 @@ var QDrawer_default = createComponent({
12002
12019
  timerMini = setTimeout(() => {
12003
12020
  timerMini = null;
12004
12021
  flagMiniAnimate.value = false;
12005
- if (vm2 && vm2.proxy && vm2.proxy.$el) {
12006
- vm2.proxy.$el.classList.remove("q-drawer--mini-animate");
12007
- }
12022
+ vm2?.proxy?.$el?.classList.remove("q-drawer--mini-animate");
12008
12023
  }, 150);
12009
12024
  }
12010
12025
  function onOpenPan(evt) {
@@ -12102,7 +12117,7 @@ var QDrawer_default = createComponent({
12102
12117
  });
12103
12118
  });
12104
12119
  onBeforeUnmount16(() => {
12105
- layoutTotalWidthWatcher !== void 0 && layoutTotalWidthWatcher();
12120
+ layoutTotalWidthWatcher?.();
12106
12121
  if (timerMini !== null) {
12107
12122
  clearTimeout(timerMini);
12108
12123
  timerMini = null;
@@ -12249,7 +12264,7 @@ var Caret = class {
12249
12264
  }
12250
12265
  get range() {
12251
12266
  const sel = this.selection;
12252
- if (sel !== null && sel.rangeCount) {
12267
+ if (sel?.rangeCount) {
12253
12268
  return sel.getRangeAt(0);
12254
12269
  }
12255
12270
  return this._range;
@@ -12716,7 +12731,7 @@ var QItem_default = createComponent({
12716
12731
  });
12717
12732
  function onClick(e) {
12718
12733
  if (isClickable.value === true) {
12719
- if (blurTargetRef.value !== null) {
12734
+ if (blurTargetRef.value !== null && e.qAvoidFocus !== true) {
12720
12735
  if (e.qKeyEvent !== true && document.activeElement === rootRef.value) {
12721
12736
  blurTargetRef.value.focus();
12722
12737
  } else if (document.activeElement === blurTargetRef.value) {
@@ -12819,7 +12834,7 @@ function getBtn(eVm, btn, clickHandler, active = false) {
12819
12834
  disable: btn.disable ? typeof btn.disable === "function" ? btn.disable(eVm) : true : false,
12820
12835
  size: "sm",
12821
12836
  onClick(e) {
12822
- clickHandler && clickHandler();
12837
+ clickHandler?.();
12823
12838
  run(e, btn, eVm);
12824
12839
  }
12825
12840
  }, () => child);
@@ -12863,7 +12878,7 @@ function getDropdown(eVm, btn) {
12863
12878
  dense: true,
12864
12879
  onClick(e) {
12865
12880
  closeDropdown();
12866
- eVm.contentRef.value !== null && eVm.contentRef.value.focus();
12881
+ e?.qAvoidFocus !== true && eVm.contentRef.value?.focus();
12867
12882
  eVm.caret.restore();
12868
12883
  run(e, btn2, eVm);
12869
12884
  }
@@ -13437,7 +13452,7 @@ var QEditor_default = createComponent({
13437
13452
  }
13438
13453
  function focus() {
13439
13454
  addFocusFn(() => {
13440
- contentRef.value !== null && contentRef.value.focus({ preventScroll: true });
13455
+ contentRef.value?.focus({ preventScroll: true });
13441
13456
  });
13442
13457
  }
13443
13458
  function getContentEl() {
@@ -13558,7 +13573,7 @@ var QSlideTransition_default = createComponent({
13558
13573
  let animating = false, doneFn, element;
13559
13574
  let timer2 = null, timerFallback = null, animListener, lastEvent;
13560
13575
  function cleanup() {
13561
- doneFn && doneFn();
13576
+ doneFn?.();
13562
13577
  doneFn = null;
13563
13578
  animating = false;
13564
13579
  if (timer2 !== null) {
@@ -13569,7 +13584,7 @@ var QSlideTransition_default = createComponent({
13569
13584
  clearTimeout(timerFallback);
13570
13585
  timerFallback = null;
13571
13586
  }
13572
- element !== void 0 && element.removeEventListener("transitionend", animListener);
13587
+ element?.removeEventListener("transitionend", animListener);
13573
13588
  animListener = null;
13574
13589
  }
13575
13590
  function begin(el, height2, done) {
@@ -13795,7 +13810,7 @@ var QExpansionItem_default = createComponent({
13795
13810
  };
13796
13811
  });
13797
13812
  watch18(() => props4.group, (name2) => {
13798
- exitGroup !== void 0 && exitGroup();
13813
+ exitGroup?.();
13799
13814
  name2 !== void 0 && enterGroup();
13800
13815
  });
13801
13816
  function onHeaderClick(e) {
@@ -13806,7 +13821,9 @@ var QExpansionItem_default = createComponent({
13806
13821
  e.keyCode === 13 && toggleIcon(e, true);
13807
13822
  }
13808
13823
  function toggleIcon(e, keyboard) {
13809
- keyboard !== true && blurTargetRef.value !== null && blurTargetRef.value.focus();
13824
+ if (keyboard !== true && e.qAvoidFocus !== true) {
13825
+ blurTargetRef.value?.focus();
13826
+ }
13810
13827
  toggle(e);
13811
13828
  stopAndPrevent(e);
13812
13829
  }
@@ -13963,7 +13980,7 @@ var QExpansionItem_default = createComponent({
13963
13980
  }
13964
13981
  props4.group !== void 0 && enterGroup();
13965
13982
  onBeforeUnmount20(() => {
13966
- exitGroup !== void 0 && exitGroup();
13983
+ exitGroup?.();
13967
13984
  });
13968
13985
  return () => h49("div", { class: classes.value }, [
13969
13986
  h49("div", { class: "q-expansion-item__container relative-position" }, getContent())
@@ -14128,8 +14145,8 @@ var QFab_default = createComponent({
14128
14145
  showing,
14129
14146
  onChildClick(evt) {
14130
14147
  hide(evt);
14131
- if (triggerRef.value !== null) {
14132
- triggerRef.value.$el.focus();
14148
+ if (evt?.qAvoidFocus !== true) {
14149
+ triggerRef.value?.$el.focus();
14133
14150
  }
14134
14151
  }
14135
14152
  });
@@ -14391,7 +14408,7 @@ function use_validate_default(focused, innerLoading) {
14391
14408
  }
14392
14409
  const debouncedValidate = debounce_default(validate, 0);
14393
14410
  onBeforeUnmount22(() => {
14394
- unwatchRules !== void 0 && unwatchRules();
14411
+ unwatchRules?.();
14395
14412
  debouncedValidate.cancel();
14396
14413
  });
14397
14414
  Object.assign(proxy, { resetValidation, validate });
@@ -14581,11 +14598,11 @@ function use_field_default(state) {
14581
14598
  });
14582
14599
  function focusHandler() {
14583
14600
  const el = document.activeElement;
14584
- let target2 = state.targetRef !== void 0 && state.targetRef.value;
14601
+ let target2 = state.targetRef?.value;
14585
14602
  if (target2 && (el === null || el.id !== state.targetUid.value)) {
14586
14603
  target2.hasAttribute("tabindex") === true || (target2 = target2.querySelector("[tabindex]"));
14587
- if (target2 && target2 !== el) {
14588
- target2.focus({ preventScroll: true });
14604
+ if (target2 !== el) {
14605
+ target2?.focus({ preventScroll: true });
14589
14606
  }
14590
14607
  }
14591
14608
  }
@@ -14618,13 +14635,13 @@ function use_field_default(state) {
14618
14635
  state.focused.value = false;
14619
14636
  emit("blur", e);
14620
14637
  }
14621
- then !== void 0 && then();
14638
+ then?.();
14622
14639
  });
14623
14640
  }
14624
14641
  function clearValue(e) {
14625
14642
  stopAndPrevent(e);
14626
14643
  if ($q.platform.is.mobile !== true) {
14627
- const el = state.targetRef !== void 0 && state.targetRef.value || state.rootRef.value;
14644
+ const el = state.targetRef?.value || state.rootRef.value;
14628
14645
  el.focus();
14629
14646
  } else if (state.rootRef.value.contains(document.activeElement) === true) {
14630
14647
  document.activeElement.blur();
@@ -14869,7 +14886,9 @@ function filterFiles(files, rejectedFiles, failedPropValidation, filterFn) {
14869
14886
  return acceptedFiles;
14870
14887
  }
14871
14888
  function stopAndPreventDrag(e) {
14872
- e && e.dataTransfer && (e.dataTransfer.dropEffect = "copy");
14889
+ if (e?.dataTransfer) {
14890
+ e.dataTransfer.dropEffect = "copy";
14891
+ }
14873
14892
  stopAndPrevent(e);
14874
14893
  }
14875
14894
  var useFileProps = {
@@ -14906,11 +14925,11 @@ function use_file_default({
14906
14925
  if (e !== Object(e)) {
14907
14926
  e = { target: null };
14908
14927
  }
14909
- if (e.target !== null && e.target.matches('input[type="file"]') === true) {
14928
+ if (e.target?.matches('input[type="file"]') === true) {
14910
14929
  e.clientX === 0 && e.clientY === 0 && stop(e);
14911
14930
  } else {
14912
14931
  const input = getFileInput();
14913
- input && input !== e.target && input.click(e);
14932
+ if (input !== e.target) input?.click(e);
14914
14933
  }
14915
14934
  }
14916
14935
  }
@@ -15473,7 +15492,7 @@ var QForm_default = createComponent({
15473
15492
  if (index === validateIndex && val === true) {
15474
15493
  if (props4.onSubmit !== void 0) {
15475
15494
  emit("submit", evt);
15476
- } else if (evt !== void 0 && evt.target !== void 0 && typeof evt.target.submit === "function") {
15495
+ } else if (evt?.target !== void 0 && typeof evt.target.submit === "function") {
15477
15496
  evt.target.submit();
15478
15497
  }
15479
15498
  }
@@ -15493,7 +15512,7 @@ var QForm_default = createComponent({
15493
15512
  addFocusFn(() => {
15494
15513
  if (rootRef.value === null) return;
15495
15514
  const target2 = rootRef.value.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]") || rootRef.value.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]") || rootRef.value.querySelector("[autofocus], [data-autofocus]") || Array.prototype.find.call(rootRef.value.querySelectorAll("[tabindex]"), (el) => el.tabIndex !== -1);
15496
- target2 !== null && target2 !== void 0 && target2.focus({ preventScroll: true });
15515
+ target2?.focus({ preventScroll: true });
15497
15516
  });
15498
15517
  }
15499
15518
  provide3(formKey, {
@@ -15561,12 +15580,14 @@ var QFormChildMixin_default = {
15561
15580
  }
15562
15581
  },
15563
15582
  mounted() {
15564
- const $form = this.$.provides[formKey];
15565
- $form !== void 0 && this.disable !== true && $form.bindComponent(this);
15583
+ if (this.disable !== true) {
15584
+ this.$.provides[formKey]?.bindComponent(this);
15585
+ }
15566
15586
  },
15567
15587
  beforeUnmount() {
15568
- const $form = this.$.provides[formKey];
15569
- $form !== void 0 && this.disable !== true && $form.unbindComponent(this);
15588
+ if (this.disable !== true) {
15589
+ this.$.provides[formKey]?.unbindComponent(this);
15590
+ }
15570
15591
  }
15571
15592
  };
15572
15593
 
@@ -16044,9 +16065,7 @@ var QInfiniteScroll_default = createComponent({
16044
16065
  isWorking.value = false;
16045
16066
  isFetching.value = false;
16046
16067
  localScrollTarget.removeEventListener("scroll", poll, passive2);
16047
- if (poll !== void 0 && poll.cancel !== void 0) {
16048
- poll.cancel();
16049
- }
16068
+ poll?.cancel?.();
16050
16069
  }
16051
16070
  }
16052
16071
  function updateScrollTarget() {
@@ -16131,7 +16150,7 @@ var QInfiniteScroll_default = createComponent({
16131
16150
  const vm2 = getCurrentInstance47();
16132
16151
  Object.assign(vm2.proxy, {
16133
16152
  poll: () => {
16134
- poll !== void 0 && poll();
16153
+ poll?.();
16135
16154
  },
16136
16155
  trigger: trigger3,
16137
16156
  stop: stop2,
@@ -16742,7 +16761,7 @@ var QInput_default = createComponent({
16742
16761
  });
16743
16762
  }
16744
16763
  function select() {
16745
- inputRef.value !== null && inputRef.value.select();
16764
+ inputRef.value?.select();
16746
16765
  }
16747
16766
  function onPaste(e) {
16748
16767
  if (hasMask.value === true && props4.reverseFillMask !== true) {
@@ -16835,7 +16854,7 @@ var QInput_default = createComponent({
16835
16854
  clearTimeout(emitTimer);
16836
16855
  emitTimer = null;
16837
16856
  }
16838
- emitValueFn !== void 0 && emitValueFn();
16857
+ emitValueFn?.();
16839
16858
  emit("change", e.target.value);
16840
16859
  }
16841
16860
  function onFinishEditing(e) {
@@ -16844,7 +16863,7 @@ var QInput_default = createComponent({
16844
16863
  clearTimeout(emitTimer);
16845
16864
  emitTimer = null;
16846
16865
  }
16847
- emitValueFn !== void 0 && emitValueFn();
16866
+ emitValueFn?.();
16848
16867
  typedNumber = false;
16849
16868
  stopValueWatcher = false;
16850
16869
  delete temp.value;
@@ -16936,7 +16955,7 @@ function update2(el, ctx, value2) {
16936
16955
  }
16937
16956
  if (changed2 === true) {
16938
16957
  ctx.cfg = cfg;
16939
- ctx.observer !== void 0 && ctx.observer.unobserve(el);
16958
+ ctx.observer?.unobserve(el);
16940
16959
  ctx.observer = new IntersectionObserver(([entry]) => {
16941
16960
  if (typeof ctx.handler === "function") {
16942
16961
  if (entry.rootBounds === null && document.body.contains(el) === true) {
@@ -16956,7 +16975,7 @@ function update2(el, ctx, value2) {
16956
16975
  function destroy(el) {
16957
16976
  const ctx = el.__qvisible;
16958
16977
  if (ctx !== void 0) {
16959
- ctx.observer !== void 0 && ctx.observer.unobserve(el);
16978
+ ctx.observer?.unobserve(el);
16960
16979
  delete el.__qvisible;
16961
16980
  }
16962
16981
  }
@@ -17315,7 +17334,7 @@ var QScrollObserver_default = createComponent({
17315
17334
  configureScrollTarget();
17316
17335
  });
17317
17336
  function emitEvent() {
17318
- clearTimer !== null && clearTimer();
17337
+ clearTimer?.();
17319
17338
  const top = Math.max(0, getVerticalScrollPosition(localScrollTarget));
17320
17339
  const left = getHorizontalScrollPosition(localScrollTarget);
17321
17340
  const delta = {
@@ -17362,7 +17381,7 @@ var QScrollObserver_default = createComponent({
17362
17381
  configureScrollTarget();
17363
17382
  });
17364
17383
  onBeforeUnmount28(() => {
17365
- clearTimer !== null && clearTimer();
17384
+ clearTimer?.();
17366
17385
  unconfigureScrollTarget();
17367
17386
  });
17368
17387
  Object.assign(proxy, {
@@ -18404,14 +18423,16 @@ var QPagination_default = createComponent({
18404
18423
  getBtn2({
18405
18424
  key: "bls",
18406
18425
  disable: props4.disable || props4.modelValue <= minProp.value,
18407
- icon: icons.value[0]
18426
+ icon: icons.value[0],
18427
+ "aria-label": $q.lang.pagination.first
18408
18428
  }, minProp.value)
18409
18429
  );
18410
18430
  contentEnd.unshift(
18411
18431
  getBtn2({
18412
18432
  key: "ble",
18413
18433
  disable: props4.disable || props4.modelValue >= maxProp.value,
18414
- icon: icons.value[3]
18434
+ icon: icons.value[3],
18435
+ "aria-label": $q.lang.pagination.last
18415
18436
  }, maxProp.value)
18416
18437
  );
18417
18438
  }
@@ -18420,14 +18441,16 @@ var QPagination_default = createComponent({
18420
18441
  getBtn2({
18421
18442
  key: "bdp",
18422
18443
  disable: props4.disable || props4.modelValue <= minProp.value,
18423
- icon: icons.value[1]
18444
+ icon: icons.value[1],
18445
+ "aria-label": $q.lang.pagination.prev
18424
18446
  }, props4.modelValue - 1)
18425
18447
  );
18426
18448
  contentEnd.unshift(
18427
18449
  getBtn2({
18428
18450
  key: "bdn",
18429
18451
  disable: props4.disable || props4.modelValue >= maxProp.value,
18430
- icon: icons.value[2]
18452
+ icon: icons.value[2],
18453
+ "aria-label": $q.lang.pagination.next
18431
18454
  }, props4.modelValue + 1)
18432
18455
  );
18433
18456
  }
@@ -18646,7 +18669,7 @@ var QParallax_default = createComponent({
18646
18669
  });
18647
18670
  onBeforeUnmount30(() => {
18648
18671
  stop2();
18649
- observer !== void 0 && observer.disconnect();
18672
+ observer?.disconnect();
18650
18673
  mediaEl.onload = mediaEl.onloadstart = mediaEl.loadedmetadata = null;
18651
18674
  });
18652
18675
  return () => {
@@ -18837,10 +18860,10 @@ var QPopupEdit_default = createComponent({
18837
18860
  set: set2,
18838
18861
  cancel,
18839
18862
  show(e) {
18840
- menuRef.value !== null && menuRef.value.show(e);
18863
+ menuRef.value?.show(e);
18841
18864
  },
18842
18865
  hide(e) {
18843
- menuRef.value !== null && menuRef.value.hide(e);
18866
+ menuRef.value?.hide(e);
18844
18867
  },
18845
18868
  updatePosition
18846
18869
  });
@@ -19139,7 +19162,7 @@ var QPullToRefresh_default = createComponent({
19139
19162
  timer2 = setTimeout(() => {
19140
19163
  timer2 = null;
19141
19164
  animating.value = false;
19142
- done && done();
19165
+ done?.();
19143
19166
  }, 300);
19144
19167
  }
19145
19168
  function updateScrollTarget() {
@@ -20112,7 +20135,7 @@ var setOverflowAnchor = __QUASAR_SSR__ || window.getComputedStyle(document.body)
20112
20135
  delete el2.dataset.qVsAnchor;
20113
20136
  });
20114
20137
  const el = children[index];
20115
- if (el && el.dataset) {
20138
+ if (el?.dataset) {
20116
20139
  el.dataset.qVsAnchor = "";
20117
20140
  }
20118
20141
  });
@@ -20384,7 +20407,7 @@ function useVirtualScroll({
20384
20407
  if (rangeChanged === true && contentEl !== null && contentEl !== activeElement && contentEl.contains(activeElement) === true) {
20385
20408
  contentEl.addEventListener("focusout", onBlurRefocusFn);
20386
20409
  setTimeout(() => {
20387
- contentEl !== null && contentEl.removeEventListener("focusout", onBlurRefocusFn);
20410
+ contentEl?.removeEventListener("focusout", onBlurRefocusFn);
20388
20411
  });
20389
20412
  }
20390
20413
  setOverflowAnchor(contentEl, toIndex - from);
@@ -20448,7 +20471,7 @@ function useVirtualScroll({
20448
20471
  }
20449
20472
  }
20450
20473
  function onBlurRefocusFn() {
20451
- contentRef.value !== null && contentRef.value !== void 0 && contentRef.value.focus();
20474
+ contentRef.value?.focus();
20452
20475
  }
20453
20476
  function localResetVirtualScroll(toIndex, fullReset) {
20454
20477
  const defaultSize = 1 * virtualScrollItemSizeComputed.value;
@@ -20786,7 +20809,7 @@ var QSelect_default = createComponent({
20786
20809
  () => innerValue.value.map((opt) => getOptionLabel.value(opt)).join(", ")
20787
20810
  );
20788
20811
  const ariaCurrentValue = computed89(() => props4.displayValue !== void 0 ? props4.displayValue : selectedString.value);
20789
- const needsHtmlFn = computed89(() => props4.optionsHtml === true ? () => true : (opt) => opt !== void 0 && opt !== null && opt.html === true);
20812
+ const needsHtmlFn = computed89(() => props4.optionsHtml === true ? () => true : (opt) => opt?.html === true);
20790
20813
  const valueAsHtml = computed89(() => props4.displayValueHtml === true || props4.displayValue === void 0 && (props4.optionsHtml === true || innerValue.value.some(needsHtmlFn.value)));
20791
20814
  const tabindex = computed89(() => state.focused.value === true ? props4.tabindex : -1);
20792
20815
  const comboboxAttrs = computed89(() => {
@@ -20960,13 +20983,15 @@ var QSelect_default = createComponent({
20960
20983
  );
20961
20984
  hidePopup();
20962
20985
  }
20963
- targetRef.value !== null && targetRef.value.focus();
20986
+ targetRef.value?.focus();
20964
20987
  if (innerValue.value.length === 0 || isDeepEqual(getOptionValue.value(innerValue.value[0]), optValue) !== true) {
20965
20988
  emit("update:modelValue", props4.emitValue === true ? optValue : opt);
20966
20989
  }
20967
20990
  return;
20968
20991
  }
20969
- (hasDialog !== true || dialogFieldFocused.value === true) && state.focus();
20992
+ if (hasDialog !== true || dialogFieldFocused.value === true) {
20993
+ state.focus();
20994
+ }
20970
20995
  selectInputText();
20971
20996
  if (innerValue.value.length === 0) {
20972
20997
  const val = props4.emitValue === true ? optValue : opt;
@@ -21171,7 +21196,7 @@ var QSelect_default = createComponent({
21171
21196
  const fn = mode === "toggle" ? toggleOption : add;
21172
21197
  fn(val, mode === "add-unique");
21173
21198
  if (props4.multiple !== true) {
21174
- targetRef.value !== null && targetRef.value.focus();
21199
+ targetRef.value?.focus();
21175
21200
  hidePopup();
21176
21201
  }
21177
21202
  };
@@ -21416,7 +21441,7 @@ var QSelect_default = createComponent({
21416
21441
  }
21417
21442
  function onDialogFieldFocus(e) {
21418
21443
  stop(e);
21419
- targetRef.value !== null && targetRef.value.focus();
21444
+ targetRef.value?.focus();
21420
21445
  dialogFieldFocused.value = true;
21421
21446
  window.scrollTo(window.pageXOffset || window.scrollX || document.body.scrollLeft || 0, 0);
21422
21447
  }
@@ -21645,7 +21670,7 @@ var QSelect_default = createComponent({
21645
21670
  prevent(e);
21646
21671
  if (hasDialog !== true && menu.value === true) {
21647
21672
  closeMenu();
21648
- targetRef.value !== null && targetRef.value.focus();
21673
+ targetRef.value?.focus();
21649
21674
  return;
21650
21675
  }
21651
21676
  showPopup(e);
@@ -22624,7 +22649,7 @@ var StepHeader_default = createComponent({
22624
22649
  });
22625
22650
  const ripple = computed93(() => props4.stepper.headerNav !== true ? false : headerNav.value);
22626
22651
  function onActivate() {
22627
- blurRef.value !== null && blurRef.value.focus();
22652
+ blurRef.value?.focus();
22628
22653
  isActive.value === false && props4.goToPanel(props4.step.name);
22629
22654
  }
22630
22655
  function onKeyup2(e) {
@@ -23127,7 +23152,7 @@ function useTableSort(props4, computedPagination, colList, setPagination) {
23127
23152
  col = col.name;
23128
23153
  } else {
23129
23154
  const def = colList.value.find((def2) => def2.name === col);
23130
- if (def !== void 0 && def.sortOrder) {
23155
+ if (def?.sortOrder) {
23131
23156
  sortOrder = def.sortOrder;
23132
23157
  }
23133
23158
  }
@@ -23562,10 +23587,14 @@ var QTable_default = createComponent({
23562
23587
  tableClass: [String, Array, Object],
23563
23588
  tableHeaderStyle: [String, Array, Object],
23564
23589
  tableHeaderClass: [String, Array, Object],
23590
+ tableRowStyleFn: Function,
23591
+ tableRowClassFn: Function,
23565
23592
  cardContainerClass: [String, Array, Object],
23566
23593
  cardContainerStyle: [String, Array, Object],
23567
23594
  cardStyle: [String, Array, Object],
23568
23595
  cardClass: [String, Array, Object],
23596
+ cardStyleFn: Function,
23597
+ cardClassFn: Function,
23569
23598
  hideBottom: Boolean,
23570
23599
  hideSelectedBanner: Boolean,
23571
23600
  hideNoData: Boolean,
@@ -23601,16 +23630,16 @@ var QTable_default = createComponent({
23601
23630
  const cardDefaultClass = computed102(
23602
23631
  () => " q-table__card" + (isDark.value === true ? " q-table__card--dark q-dark" : "") + (props4.square === true ? " q-table--square" : "") + (props4.flat === true ? " q-table--flat" : "") + (props4.bordered === true ? " q-table--bordered" : "")
23603
23632
  );
23604
- const __containerClass = computed102(
23633
+ const containerClass = computed102(
23605
23634
  () => `q-table__container q-table--${props4.separator}-separator column no-wrap` + (props4.grid === true ? " q-table--grid" : cardDefaultClass.value) + (isDark.value === true ? " q-table--dark" : "") + (props4.dense === true ? " q-table--dense" : "") + (props4.wrapCells === false ? " q-table--no-wrap" : "") + (inFullscreen.value === true ? " fullscreen scroll" : "")
23606
23635
  );
23607
- const containerClass = computed102(
23608
- () => __containerClass.value + (props4.loading === true ? " q-table--loading" : "")
23636
+ const rootContainerClass = computed102(
23637
+ () => containerClass.value + (props4.loading === true ? " q-table--loading" : "")
23609
23638
  );
23610
23639
  watch44(
23611
- () => props4.tableStyle + props4.tableClass + props4.tableHeaderStyle + props4.tableHeaderClass + __containerClass.value,
23640
+ () => props4.tableStyle + props4.tableClass + props4.tableHeaderStyle + props4.tableHeaderClass + containerClass.value,
23612
23641
  () => {
23613
- hasVirtScroll.value === true && virtScrollRef.value !== null && virtScrollRef.value.reset();
23642
+ hasVirtScroll.value === true && virtScrollRef.value?.reset();
23614
23643
  }
23615
23644
  );
23616
23645
  const {
@@ -23778,13 +23807,23 @@ var QTable_default = createComponent({
23778
23807
  function getTBodyTR(row, bodySlot, pageIndex) {
23779
23808
  const key = getRowKey.value(row), selected = isRowSelected(key);
23780
23809
  if (bodySlot !== void 0) {
23810
+ const cfg = {
23811
+ key,
23812
+ row,
23813
+ pageIndex,
23814
+ __trClass: selected ? "selected" : ""
23815
+ };
23816
+ if (props4.tableRowStyleFn !== void 0) {
23817
+ cfg.__trStyle = props4.tableRowStyleFn(row);
23818
+ }
23819
+ if (props4.tableRowClassFn !== void 0) {
23820
+ const cls = props4.tableRowClassFn(row);
23821
+ if (cls) {
23822
+ cfg.__trClass = `${cls} ${cfg.__trClass}`;
23823
+ }
23824
+ }
23781
23825
  return bodySlot(
23782
- getBodyScope({
23783
- key,
23784
- row,
23785
- pageIndex,
23786
- __trClass: selected ? "selected" : ""
23787
- })
23826
+ getBodyScope(cfg)
23788
23827
  );
23789
23828
  }
23790
23829
  const bodyCell = slots["body-cell"], child = computedCols.value.map((col) => {
@@ -23830,6 +23869,15 @@ var QTable_default = createComponent({
23830
23869
  emit("rowContextmenu", evt, row, pageIndex);
23831
23870
  };
23832
23871
  }
23872
+ if (props4.tableRowStyleFn !== void 0) {
23873
+ data.style = props4.tableRowStyleFn(row);
23874
+ }
23875
+ if (props4.tableRowClassFn !== void 0) {
23876
+ const cls = props4.tableRowClassFn(row);
23877
+ if (cls) {
23878
+ data.class[cls] = true;
23879
+ }
23880
+ }
23833
23881
  return h121("tr", data, child);
23834
23882
  }
23835
23883
  function getTBody() {
@@ -24083,28 +24131,26 @@ var QTable_default = createComponent({
24083
24131
  child.push(
24084
24132
  h121("div", { class: "q-table__separator col" })
24085
24133
  );
24086
- if (hasOpts === true) {
24087
- child.push(
24088
- h121("div", { class: "q-table__control" }, [
24089
- h121("span", { class: "q-table__bottom-item" }, [
24090
- props4.rowsPerPageLabel || $q.lang.table.recordsPerPage
24091
- ]),
24092
- h121(QSelect_default, {
24093
- class: "q-table__select inline q-table__bottom-item",
24094
- color: props4.color,
24095
- modelValue: rowsPerPage,
24096
- options: computedRowsPerPageOptions.value,
24097
- displayValue: rowsPerPage === 0 ? $q.lang.table.allRows : rowsPerPage,
24098
- dark: isDark.value,
24099
- borderless: true,
24100
- dense: true,
24101
- optionsDense: true,
24102
- optionsCover: true,
24103
- "onUpdate:modelValue": onPagSelection
24104
- })
24105
- ])
24106
- );
24107
- }
24134
+ hasOpts === true && child.push(
24135
+ h121("div", { class: "q-table__control" }, [
24136
+ h121("span", { class: "q-table__bottom-item" }, [
24137
+ props4.rowsPerPageLabel || $q.lang.table.recordsPerPage
24138
+ ]),
24139
+ h121(QSelect_default, {
24140
+ class: "q-table__select inline q-table__bottom-item",
24141
+ color: props4.color,
24142
+ modelValue: rowsPerPage,
24143
+ options: computedRowsPerPageOptions.value,
24144
+ displayValue: rowsPerPage === 0 ? $q.lang.table.allRows : rowsPerPage,
24145
+ dark: isDark.value,
24146
+ borderless: true,
24147
+ dense: true,
24148
+ optionsDense: true,
24149
+ optionsCover: true,
24150
+ "onUpdate:modelValue": onPagSelection
24151
+ })
24152
+ ])
24153
+ );
24108
24154
  if (paginationSlot !== void 0) {
24109
24155
  control = paginationSlot(marginalsScope.value);
24110
24156
  } else {
@@ -24129,6 +24175,7 @@ var QTable_default = createComponent({
24129
24175
  ...btnProps,
24130
24176
  icon: navIcon.value[0],
24131
24177
  disable: isFirstPage.value,
24178
+ ariaLabel: $q.lang.pagination.first,
24132
24179
  onClick: firstPage
24133
24180
  })
24134
24181
  );
@@ -24138,6 +24185,7 @@ var QTable_default = createComponent({
24138
24185
  ...btnProps,
24139
24186
  icon: navIcon.value[1],
24140
24187
  disable: isFirstPage.value,
24188
+ ariaLabel: $q.lang.pagination.prev,
24141
24189
  onClick: prevPage
24142
24190
  }),
24143
24191
  h121(QBtn_default, {
@@ -24145,6 +24193,7 @@ var QTable_default = createComponent({
24145
24193
  ...btnProps,
24146
24194
  icon: navIcon.value[2],
24147
24195
  disable: isLastPage.value,
24196
+ ariaLabel: $q.lang.pagination.next,
24148
24197
  onClick: nextPage
24149
24198
  })
24150
24199
  );
@@ -24154,6 +24203,7 @@ var QTable_default = createComponent({
24154
24203
  ...btnProps,
24155
24204
  icon: navIcon.value[3],
24156
24205
  disable: isLastPage.value,
24206
+ ariaLabel: $q.lang.pagination.last,
24157
24207
  onClick: lastPage
24158
24208
  })
24159
24209
  );
@@ -24205,6 +24255,15 @@ var QTable_default = createComponent({
24205
24255
  ],
24206
24256
  style: props4.cardStyle
24207
24257
  };
24258
+ if (props4.cardStyleFn !== void 0) {
24259
+ data.style = [data.style, props4.cardStyleFn(scope.row)];
24260
+ }
24261
+ if (props4.cardClassFn !== void 0) {
24262
+ const cls = props4.cardClassFn(scope.row);
24263
+ if (cls) {
24264
+ data.class[0] += ` ${cls}`;
24265
+ }
24266
+ }
24208
24267
  if (props4.onRowClick !== void 0 || props4.onRowDblclick !== void 0 || props4.onRowContextmenu !== void 0) {
24209
24268
  data.class[0] += " cursor-pointer";
24210
24269
  if (props4.onRowClick !== void 0) {
@@ -24266,7 +24325,7 @@ var QTable_default = createComponent({
24266
24325
  });
24267
24326
  return () => {
24268
24327
  const child = [getTopDiv()];
24269
- const data = { ref: rootRef, class: containerClass.value };
24328
+ const data = { ref: rootRef, class: rootContainerClass.value };
24270
24329
  if (props4.grid === true) {
24271
24330
  child.push(getGridHeader());
24272
24331
  } else {
@@ -24301,7 +24360,10 @@ var QTr_default = createComponent({
24301
24360
  const classes = computed103(
24302
24361
  () => "q-tr" + (props4.props === void 0 || props4.props.header === true ? "" : " " + props4.props.__trClass) + (props4.noHover === true ? " q-tr--no-hover" : "")
24303
24362
  );
24304
- return () => h122("tr", { class: classes.value }, hSlot(slots.default));
24363
+ return () => h122("tr", {
24364
+ style: props4.props?.__trStyle,
24365
+ class: classes.value
24366
+ }, hSlot(slots.default));
24305
24367
  }
24306
24368
  });
24307
24369
 
@@ -24508,7 +24570,7 @@ var QTime_default = createComponent({
24508
24570
  }
24509
24571
  const pos = [];
24510
24572
  for (let val = start, index = start; val <= end; val += step, index++) {
24511
- const actualVal = val + offset2, disable = values !== void 0 && values.includes(actualVal) === false, label = view.value === "hour" && val === 0 ? computedFormat24h.value === true ? "00" : "12" : val;
24573
+ const actualVal = val + offset2, disable = values?.includes(actualVal) === false, label = view.value === "hour" && val === 0 ? computedFormat24h.value === true ? "00" : "12" : val;
24512
24574
  pos.push({ val: actualVal, index, disable, label });
24513
24575
  }
24514
24576
  return pos;
@@ -25377,7 +25439,7 @@ var QTree_default = createComponent({
25377
25439
  node[props4.childrenKey] = Array.isArray(children) === true ? children : [];
25378
25440
  nextTick21(() => {
25379
25441
  const localMeta = meta.value[key];
25380
- if (localMeta && localMeta.isParent === true) {
25442
+ if (localMeta?.isParent === true) {
25381
25443
  localSetExpanded(key, true);
25382
25444
  }
25383
25445
  });
@@ -25602,8 +25664,7 @@ var QTree_default = createComponent({
25602
25664
  ]);
25603
25665
  }
25604
25666
  function blur(key) {
25605
- const blurTarget = blurTargets[key];
25606
- blurTarget && blurTarget.focus();
25667
+ blurTargets[key]?.focus();
25607
25668
  }
25608
25669
  function onClick(node, meta2, e, keyboard) {
25609
25670
  keyboard !== true && meta2.selectable !== false && blur(meta2.key);
@@ -26569,7 +26630,7 @@ function morph(_options) {
26569
26630
  elFrom.qMorphCancel = () => {
26570
26631
  cancelStatus = true;
26571
26632
  elFromClone.remove();
26572
- elFromTween !== void 0 && elFromTween.remove();
26633
+ elFromTween?.remove();
26573
26634
  options.hideFromClone === true && elFromClone.classList.remove("q-morph--internal");
26574
26635
  elFrom.qMorphCancel = void 0;
26575
26636
  };
@@ -26594,7 +26655,7 @@ function morph(_options) {
26594
26655
  elTo.qMorphCancel = () => {
26595
26656
  cancelStatus = true;
26596
26657
  elFromClone.remove();
26597
- elFromTween !== void 0 && elFromTween.remove();
26658
+ elFromTween?.remove();
26598
26659
  options.hideFromClone === true && elFromClone.classList.remove("q-morph--internal");
26599
26660
  options.keepToClone !== true && elTo.classList.remove("q-morph--internal");
26600
26661
  elFrom.qMorphCancel = void 0;
@@ -26750,10 +26811,12 @@ function morph(_options) {
26750
26811
  elTo.style.cssText = elToStyleSaved;
26751
26812
  elTo.className = elToClassSaved;
26752
26813
  }
26753
- elToClone.parentNode === elToParent && elToParent.insertBefore(elTo, elToClone);
26814
+ if (elToClone.parentNode === elToParent) {
26815
+ elToParent.insertBefore(elTo, elToClone);
26816
+ }
26754
26817
  elFromClone.remove();
26755
26818
  elToClone.remove();
26756
- elFromTween !== void 0 && elFromTween.remove();
26819
+ elFromTween?.remove();
26757
26820
  cancel = () => false;
26758
26821
  elFrom.qMorphCancel = void 0;
26759
26822
  elTo.qMorphCancel = void 0;
@@ -26885,9 +26948,9 @@ function morph(_options) {
26885
26948
  delay: options.delay
26886
26949
  });
26887
26950
  const cleanup = (abort) => {
26888
- animationFromClone !== void 0 && animationFromClone.cancel();
26889
- animationFromTween !== void 0 && animationFromTween.cancel();
26890
- animationToClone !== void 0 && animationToClone.cancel();
26951
+ animationFromClone?.cancel();
26952
+ animationFromTween?.cancel();
26953
+ animationToClone?.cancel();
26891
26954
  animationTo.cancel();
26892
26955
  animationTo.removeEventListener("finish", cleanup);
26893
26956
  animationTo.removeEventListener("cancel", cleanup);
@@ -26918,9 +26981,9 @@ function morph(_options) {
26918
26981
  return true;
26919
26982
  }
26920
26983
  endElementTo = endElementTo !== true;
26921
- animationFromClone !== void 0 && animationFromClone.reverse();
26922
- animationFromTween !== void 0 && animationFromTween.reverse();
26923
- animationToClone !== void 0 && animationToClone.reverse();
26984
+ animationFromClone?.reverse();
26985
+ animationFromTween?.reverse();
26986
+ animationToClone?.reverse();
26924
26987
  animationTo.reverse();
26925
26988
  return true;
26926
26989
  };
@@ -27172,7 +27235,7 @@ function trigger2(group) {
27172
27235
  },
27173
27236
  ...to.opts,
27174
27237
  onEnd(dir, aborted) {
27175
- to.opts.onEnd !== void 0 && to.opts.onEnd(dir, aborted);
27238
+ to.opts.onEnd?.(dir, aborted);
27176
27239
  if (aborted === true) return;
27177
27240
  from.animating = false;
27178
27241
  to.animating = false;
@@ -27289,7 +27352,7 @@ var Morph_default = createDirective(
27289
27352
  if (index !== -1) {
27290
27353
  group.queue = group.queue.filter((item) => item !== ctx);
27291
27354
  if (group.queue.length === 0) {
27292
- group.cancel !== void 0 && group.cancel();
27355
+ group.cancel?.();
27293
27356
  delete morphGroups[ctx.group];
27294
27357
  }
27295
27358
  }
@@ -27313,7 +27376,7 @@ var defaultCfg2 = {
27313
27376
  };
27314
27377
  function update3(el, ctx, value2) {
27315
27378
  ctx.handler = value2;
27316
- ctx.observer !== void 0 && ctx.observer.disconnect();
27379
+ ctx.observer?.disconnect();
27317
27380
  ctx.observer = new MutationObserver((list) => {
27318
27381
  if (typeof ctx.handler === "function") {
27319
27382
  const res = ctx.handler(list);
@@ -27327,7 +27390,7 @@ function update3(el, ctx, value2) {
27327
27390
  function destroy2(el) {
27328
27391
  const ctx = el.__qmutation;
27329
27392
  if (ctx !== void 0) {
27330
- ctx.observer !== void 0 && ctx.observer.disconnect();
27393
+ ctx.observer?.disconnect();
27331
27394
  delete el.__qmutation;
27332
27395
  }
27333
27396
  }
@@ -27516,7 +27579,7 @@ var TouchHold_default = createDirective(
27516
27579
  },
27517
27580
  end(evt) {
27518
27581
  cleanEvt(ctx, "temp");
27519
- ctx.styleCleanup !== void 0 && ctx.styleCleanup(ctx.triggered);
27582
+ ctx.styleCleanup?.(ctx.triggered);
27520
27583
  if (ctx.triggered === true) {
27521
27584
  evt !== void 0 && stopAndPrevent(evt);
27522
27585
  } else if (ctx.timer !== void 0) {
@@ -27558,7 +27621,7 @@ var TouchHold_default = createDirective(
27558
27621
  cleanEvt(ctx, "main");
27559
27622
  cleanEvt(ctx, "temp");
27560
27623
  ctx.timer !== void 0 && clearTimeout(ctx.timer);
27561
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
27624
+ ctx.styleCleanup?.();
27562
27625
  delete el.__qtouchhold;
27563
27626
  }
27564
27627
  }
@@ -27700,8 +27763,8 @@ var TouchRepeat_default = createDirective(
27700
27763
  },
27701
27764
  end(evt) {
27702
27765
  if (ctx.event === void 0) return;
27703
- ctx.styleCleanup !== void 0 && ctx.styleCleanup(true);
27704
- evt !== void 0 && ctx.event.repeatCount > 0 && stopAndPrevent(evt);
27766
+ ctx.styleCleanup?.(true);
27767
+ if (evt !== void 0 && ctx.event.repeatCount > 0) stopAndPrevent(evt);
27705
27768
  cleanEvt(ctx, "temp");
27706
27769
  if (ctx.timer !== void 0) {
27707
27770
  clearTimeout(ctx.timer);
@@ -27741,7 +27804,7 @@ var TouchRepeat_default = createDirective(
27741
27804
  ctx.timer !== void 0 && clearTimeout(ctx.timer);
27742
27805
  cleanEvt(ctx, "main");
27743
27806
  cleanEvt(ctx, "temp");
27744
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
27807
+ ctx.styleCleanup?.();
27745
27808
  delete el.__qtouchrepeat;
27746
27809
  }
27747
27810
  }
@@ -28085,12 +28148,12 @@ function create_dialog_default(DefaultComponent, supportsCustomComponent, parent
28085
28148
  const dialogRef = ref68(null);
28086
28149
  const el = createGlobalNode(false, "dialog");
28087
28150
  const applyState = (cmd) => {
28088
- if (dialogRef.value !== null && dialogRef.value[cmd] !== void 0) {
28151
+ if (dialogRef.value?.[cmd] !== void 0) {
28089
28152
  dialogRef.value[cmd]();
28090
28153
  return;
28091
28154
  }
28092
28155
  const target2 = vm2.$.subTree;
28093
- if (target2 && target2.component) {
28156
+ if (target2?.component) {
28094
28157
  if (target2.component.proxy && target2.component.proxy[cmd]) {
28095
28158
  target2.component.proxy[cmd]();
28096
28159
  return;
@@ -28577,7 +28640,7 @@ var originalDefaults = {
28577
28640
  };
28578
28641
  var defaults = { ...originalDefaults };
28579
28642
  function registerProps(opts) {
28580
- if (opts && opts.group !== void 0 && activeGroups[opts.group] !== void 0) {
28643
+ if (opts?.group !== void 0 && activeGroups[opts.group] !== void 0) {
28581
28644
  return Object.assign(activeGroups[opts.group], opts);
28582
28645
  }
28583
28646
  const newProps = isObject(opts) === true && opts.ignoreDefaults === true ? { ...originalDefaults, ...opts } : { ...defaults, ...opts };
@@ -29022,7 +29085,7 @@ function addNotification(config, $q, originalApi) {
29022
29085
  const actions = (Array.isArray(config.actions) === true ? config.actions : []).concat(
29023
29086
  config.ignoreDefaults !== true && Array.isArray(defaults2.actions) === true ? defaults2.actions : []
29024
29087
  ).concat(
29025
- notifTypes[config.type] !== void 0 && Array.isArray(notifTypes[config.type].actions) === true ? notifTypes[config.type].actions : []
29088
+ Array.isArray(notifTypes[config.type]?.actions) === true ? notifTypes[config.type].actions : []
29026
29089
  );
29027
29090
  const { closeBtn } = notif;
29028
29091
  closeBtn && actions.push({
@@ -29741,9 +29804,9 @@ function parseFeatures(winFeatures) {
29741
29804
  function openWindow(url, reject, windowFeatures) {
29742
29805
  let open2 = window.open;
29743
29806
  if (Platform_default.is.cordova === true) {
29744
- if (cordova !== void 0 && cordova.InAppBrowser !== void 0 && cordova.InAppBrowser.open !== void 0) {
29807
+ if (cordova?.InAppBrowser?.open !== void 0) {
29745
29808
  open2 = cordova.InAppBrowser.open;
29746
- } else if (navigator !== void 0 && navigator.app !== void 0) {
29809
+ } else if (navigator?.app !== void 0) {
29747
29810
  return navigator.app.loadUrl(url, {
29748
29811
  openExternal: true
29749
29812
  });
@@ -29754,7 +29817,7 @@ function openWindow(url, reject, windowFeatures) {
29754
29817
  Platform_default.is.desktop && win.focus();
29755
29818
  return win;
29756
29819
  } else {
29757
- reject && reject();
29820
+ reject?.();
29758
29821
  }
29759
29822
  }
29760
29823
  var open_url_default = (url, reject, windowFeatures) => {
@@ -29839,7 +29902,7 @@ function runSequentialPromises(sequentialPromises, { threadsNumber = 1, abortOnF
29839
29902
 
29840
29903
  // src/index.dev.js
29841
29904
  var Quasar = {
29842
- version: "2.17.7",
29905
+ version: "2.18.0",
29843
29906
  install: install_quasar_default,
29844
29907
  // TODO: remove in Qv3 (should only be used through the plugin)
29845
29908
  // We provide a deprecated fallback here