quasar 2.17.6 → 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 (291) 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/QOptionGroup.json +1 -1
  5. package/dist/api/QSelect.json +1 -1
  6. package/dist/api/QTable.json +1 -1
  7. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  8. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  9. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  10. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  11. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  12. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  13. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  14. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  15. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  16. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  17. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  18. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  19. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  20. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  21. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  22. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  23. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  24. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  25. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  26. package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +1 -1
  40. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
  41. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
  42. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  43. package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
  44. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  45. package/dist/icon-set/themify.umd.prod.js +1 -1
  46. package/dist/lang/ar-TN.umd.prod.js +2 -2
  47. package/dist/lang/ar.umd.prod.js +2 -2
  48. package/dist/lang/az-Latn.umd.prod.js +2 -2
  49. package/dist/lang/bg.umd.prod.js +2 -2
  50. package/dist/lang/bn.umd.prod.js +2 -2
  51. package/dist/lang/bs-BA.umd.prod.js +2 -2
  52. package/dist/lang/ca.umd.prod.js +2 -2
  53. package/dist/lang/cs.umd.prod.js +2 -2
  54. package/dist/lang/da.umd.prod.js +2 -2
  55. package/dist/lang/de-CH.umd.prod.js +2 -2
  56. package/dist/lang/de-DE.umd.prod.js +2 -2
  57. package/dist/lang/de.umd.prod.js +2 -2
  58. package/dist/lang/el.umd.prod.js +2 -2
  59. package/dist/lang/en-GB.umd.prod.js +2 -2
  60. package/dist/lang/en-US.umd.prod.js +2 -2
  61. package/dist/lang/eo.umd.prod.js +2 -2
  62. package/dist/lang/es.umd.prod.js +2 -2
  63. package/dist/lang/et.umd.prod.js +2 -2
  64. package/dist/lang/eu.umd.prod.js +2 -2
  65. package/dist/lang/fa-IR.umd.prod.js +2 -2
  66. package/dist/lang/fa.umd.prod.js +2 -2
  67. package/dist/lang/fi.umd.prod.js +2 -2
  68. package/dist/lang/fr.umd.prod.js +2 -2
  69. package/dist/lang/gn.umd.prod.js +2 -2
  70. package/dist/lang/he.umd.prod.js +2 -2
  71. package/dist/lang/hi.umd.prod.js +2 -2
  72. package/dist/lang/hr.umd.prod.js +2 -2
  73. package/dist/lang/hu.umd.prod.js +2 -2
  74. package/dist/lang/id.umd.prod.js +2 -2
  75. package/dist/lang/is.umd.prod.js +2 -2
  76. package/dist/lang/it.umd.prod.js +2 -2
  77. package/dist/lang/ja.umd.prod.js +2 -2
  78. package/dist/lang/kk.umd.prod.js +2 -2
  79. package/dist/lang/km.umd.prod.js +2 -2
  80. package/dist/lang/ko-KR.umd.prod.js +2 -2
  81. package/dist/lang/kur-CKB.umd.prod.js +2 -2
  82. package/dist/lang/lt.umd.prod.js +2 -2
  83. package/dist/lang/lu.umd.prod.js +2 -2
  84. package/dist/lang/lv.umd.prod.js +2 -2
  85. package/dist/lang/mk.umd.prod.js +2 -2
  86. package/dist/lang/ml.umd.prod.js +2 -2
  87. package/dist/lang/mm.umd.prod.js +2 -2
  88. package/dist/lang/ms-MY.umd.prod.js +2 -2
  89. package/dist/lang/ms.umd.prod.js +2 -2
  90. package/dist/lang/my.umd.prod.js +2 -2
  91. package/dist/lang/nb-NO.umd.prod.js +2 -2
  92. package/dist/lang/nl.umd.prod.js +2 -2
  93. package/dist/lang/pl.umd.prod.js +2 -2
  94. package/dist/lang/pt-BR.umd.prod.js +2 -2
  95. package/dist/lang/pt.umd.prod.js +2 -2
  96. package/dist/lang/ro.umd.prod.js +2 -2
  97. package/dist/lang/ru.umd.prod.js +2 -2
  98. package/dist/lang/sk.umd.prod.js +2 -2
  99. package/dist/lang/sl.umd.prod.js +2 -2
  100. package/dist/lang/sm.umd.prod.js +2 -2
  101. package/dist/lang/sr-CYR.umd.prod.js +2 -2
  102. package/dist/lang/sr.umd.prod.js +2 -2
  103. package/dist/lang/sv.umd.prod.js +2 -2
  104. package/dist/lang/ta.umd.prod.js +2 -2
  105. package/dist/lang/th.umd.prod.js +2 -2
  106. package/dist/lang/tl.umd.prod.js +2 -2
  107. package/dist/lang/tr.umd.prod.js +2 -2
  108. package/dist/lang/ug.umd.prod.js +1 -1
  109. package/dist/lang/uk.umd.prod.js +2 -2
  110. package/dist/lang/ur-PK.umd.prod.js +7 -0
  111. package/dist/lang/uz-Cyrl.umd.prod.js +2 -2
  112. package/dist/lang/uz-Latn.umd.prod.js +2 -2
  113. package/dist/lang/vi.umd.prod.js +2 -2
  114. package/dist/lang/zh-CN.umd.prod.js +2 -2
  115. package/dist/lang/zh-TW.umd.prod.js +2 -2
  116. package/dist/quasar.client.js +252 -179
  117. package/dist/quasar.css +1 -1
  118. package/dist/quasar.prod.css +1 -1
  119. package/dist/quasar.rtl.css +1 -1
  120. package/dist/quasar.rtl.prod.css +1 -1
  121. package/dist/quasar.sass +2 -2
  122. package/dist/quasar.server.prod.cjs +36 -36
  123. package/dist/quasar.server.prod.js +37 -37
  124. package/dist/quasar.umd.js +252 -179
  125. package/dist/quasar.umd.prod.js +42 -42
  126. package/dist/types/index.d.ts +86 -17
  127. package/dist/vetur/quasar-attributes.json +1 -1
  128. package/dist/vetur/quasar-tags.json +1 -1
  129. package/dist/web-types/web-types.json +1 -1
  130. package/lang/ar-TN.js +6 -0
  131. package/lang/ar.js +6 -0
  132. package/lang/az-Latn.js +6 -0
  133. package/lang/bg.js +6 -0
  134. package/lang/bn.js +6 -0
  135. package/lang/bs-BA.js +6 -0
  136. package/lang/ca.js +6 -0
  137. package/lang/cs.js +6 -0
  138. package/lang/da.js +6 -0
  139. package/lang/de-CH.js +6 -0
  140. package/lang/de-DE.js +6 -0
  141. package/lang/de.js +6 -0
  142. package/lang/el.js +6 -0
  143. package/lang/en-GB.js +6 -0
  144. package/lang/en-US.js +6 -0
  145. package/lang/eo.js +6 -0
  146. package/lang/es.js +6 -0
  147. package/lang/et.js +6 -0
  148. package/lang/eu.js +6 -0
  149. package/lang/fa-IR.js +6 -0
  150. package/lang/fa.js +6 -0
  151. package/lang/fi.js +6 -0
  152. package/lang/fr.js +6 -0
  153. package/lang/gn.js +6 -0
  154. package/lang/he.js +6 -0
  155. package/lang/hi.js +6 -0
  156. package/lang/hr.js +6 -0
  157. package/lang/hu.js +6 -0
  158. package/lang/id.js +6 -0
  159. package/lang/index.json +1 -1
  160. package/lang/is.js +6 -0
  161. package/lang/it.js +6 -0
  162. package/lang/ja.js +6 -0
  163. package/lang/kk.js +6 -0
  164. package/lang/km.js +6 -0
  165. package/lang/ko-KR.js +6 -0
  166. package/lang/kur-CKB.js +6 -0
  167. package/lang/lt.js +6 -0
  168. package/lang/lu.js +6 -0
  169. package/lang/lv.js +6 -0
  170. package/lang/mk.js +6 -0
  171. package/lang/ml.js +6 -0
  172. package/lang/mm.js +6 -0
  173. package/lang/ms-MY.js +6 -0
  174. package/lang/ms.js +6 -0
  175. package/lang/my.js +6 -0
  176. package/lang/nb-NO.js +6 -0
  177. package/lang/nl.js +6 -0
  178. package/lang/pl.js +6 -0
  179. package/lang/pt-BR.js +6 -0
  180. package/lang/pt.js +6 -0
  181. package/lang/ro.js +6 -0
  182. package/lang/ru.js +6 -0
  183. package/lang/sk.js +6 -0
  184. package/lang/sl.js +6 -0
  185. package/lang/sm.js +6 -0
  186. package/lang/sr-CYR.js +6 -0
  187. package/lang/sr.js +6 -0
  188. package/lang/sv.js +6 -0
  189. package/lang/ta.js +6 -0
  190. package/lang/th.js +6 -0
  191. package/lang/tl.js +6 -0
  192. package/lang/tr.js +6 -0
  193. package/lang/uk.js +6 -0
  194. package/lang/ur-PK.js +111 -0
  195. package/lang/uz-Cyrl.js +6 -0
  196. package/lang/uz-Latn.js +6 -0
  197. package/lang/vi.js +6 -0
  198. package/lang/zh-CN.js +6 -0
  199. package/lang/zh-TW.js +6 -0
  200. package/package.json +4 -4
  201. package/src/components/breadcrumbs/QBreadcrumbs.js +2 -2
  202. package/src/components/btn/QBtn.js +7 -8
  203. package/src/components/btn-dropdown/QBtnDropdown.js +10 -4
  204. package/src/components/btn-dropdown/QBtnDropdown.json +21 -0
  205. package/src/components/color/QColor.js +1 -1
  206. package/src/components/date/QDate.js +14 -7
  207. package/src/components/dialog/QDialog.js +2 -2
  208. package/src/components/dialog/QDialog.json +1 -1
  209. package/src/components/drawer/QDrawer.js +3 -5
  210. package/src/components/editor/QEditor.js +1 -1
  211. package/src/components/editor/editor-caret.js +1 -1
  212. package/src/components/editor/editor-utils.js +2 -2
  213. package/src/components/expansion-item/QExpansionItem.js +6 -3
  214. package/src/components/fab/QFab.js +2 -2
  215. package/src/components/form/QForm.js +2 -2
  216. package/src/components/form/QFormChildMixin.js +6 -4
  217. package/src/components/icon/QIcon.js +2 -2
  218. package/src/components/infinite-scroll/QInfiniteScroll.js +2 -4
  219. package/src/components/input/QInput.js +3 -3
  220. package/src/components/item/QItem.js +1 -1
  221. package/src/components/menu/QMenu.js +8 -5
  222. package/src/components/menu/QMenu.json +8 -1
  223. package/src/components/option-group/QOptionGroup.json +1 -17
  224. package/src/components/pagination/QPagination.js +8 -4
  225. package/src/components/parallax/QParallax.js +1 -1
  226. package/src/components/popup-edit/QPopupEdit.js +2 -2
  227. package/src/components/pull-to-refresh/QPullToRefresh.js +1 -1
  228. package/src/components/rating/QRating.sass +1 -1
  229. package/src/components/resize-observer/QResizeObserver.js +1 -1
  230. package/src/components/scroll-observer/QScrollObserver.js +2 -2
  231. package/src/components/select/QSelect.js +8 -6
  232. package/src/components/select/QSelect.json +2 -2
  233. package/src/components/slide-transition/QSlideTransition.js +2 -2
  234. package/src/components/stepper/StepHeader.js +1 -1
  235. package/src/components/table/QTable.js +84 -36
  236. package/src/components/table/QTable.json +138 -0
  237. package/src/components/table/QTr.js +4 -1
  238. package/src/components/table/table-sort.js +1 -1
  239. package/src/components/tabs/QTabs.js +2 -2
  240. package/src/components/tabs/use-tab.js +4 -4
  241. package/src/components/time/QTime.js +1 -1
  242. package/src/components/tree/QTree.js +2 -3
  243. package/src/components/virtual-scroll/use-virtual-scroll.js +3 -3
  244. package/src/composables/private.use-field/use-field.js +5 -5
  245. package/src/composables/private.use-file/use-file.js +6 -3
  246. package/src/composables/private.use-model-toggle/use-model-toggle.js +2 -2
  247. package/src/composables/private.use-refocus-target/use-refocus-target.js +6 -5
  248. package/src/composables/private.use-validate/use-validate.js +1 -1
  249. package/src/directives/intersection/Intersection.js +2 -2
  250. package/src/directives/morph/Morph.js +2 -2
  251. package/src/directives/mutation/Mutation.js +2 -2
  252. package/src/directives/touch-hold/TouchHold.js +2 -2
  253. package/src/directives/touch-pan/TouchPan.js +2 -2
  254. package/src/directives/touch-repeat/TouchRepeat.js +3 -3
  255. package/src/directives/touch-swipe/TouchSwipe.js +3 -3
  256. package/src/plugins/lang/Lang.test.js +12 -0
  257. package/src/plugins/loading/Loading.js +1 -1
  258. package/src/plugins/notify/Notify.js +1 -1
  259. package/src/plugins/private.body/Body.js +1 -1
  260. package/src/plugins/private.history/History.js +1 -1
  261. package/src/plugins/screen/Screen.js +1 -1
  262. package/src/utils/morph/morph.js +13 -10
  263. package/src/utils/open-url/open-url.js +3 -3
  264. package/src/utils/private.dialog/create-dialog.js +2 -2
  265. package/src/utils/private.portal/portal.js +1 -1
  266. package/src/components/date/__tests__/QDate.cy.js +0 -189
  267. package/src/components/date/__tests__/use-datetime.cy.js +0 -83
  268. package/src/components/editor/__tests__/QEditor.cy.js +0 -195
  269. package/src/components/field/__tests__/QField.cy.js +0 -156
  270. package/src/components/input/__tests__/QInput.cy.js +0 -786
  271. package/src/components/input/__tests__/use-mask.cy.js +0 -124
  272. package/src/components/menu/__tests__/QMenu.cy.js +0 -634
  273. package/src/components/menu/__tests__/WrapperOne.vue +0 -51
  274. package/src/components/menu/__tests__/WrapperTwo.vue +0 -38
  275. package/src/components/select/__tests__/QSelect.cy.js +0 -2018
  276. package/src/components/table/__tests__/QTable.cy.js +0 -635
  277. package/src/components/table/__tests__/QTd.cy.js +0 -35
  278. package/src/components/table/__tests__/QTh.cy.js +0 -27
  279. package/src/components/table/__tests__/QTr.cy.js +0 -27
  280. package/src/components/tabs/__tests__/QTab.cy.js +0 -79
  281. package/src/components/tabs/__tests__/QTabs.cy.js +0 -147
  282. package/src/components/uploader/__tests__/QUploader.cy.js +0 -191
  283. package/src/composables/__tests__/FieldWrapper.vue +0 -54
  284. package/src/composables/__tests__/use-anchor.cy.js +0 -98
  285. package/src/composables/__tests__/use-field.cy.js +0 -547
  286. package/src/composables/__tests__/use-file.cy.js +0 -69
  287. package/src/composables/__tests__/use-fullscreen.cy.js +0 -37
  288. package/src/composables/__tests__/use-model-toggle.cy.js +0 -350
  289. package/src/composables/__tests__/use-portal.cy.js +0 -4
  290. package/src/composables/__tests__/use-router-link.cy.js +0 -55
  291. package/src/composables/__tests__/use-validate.cy.js +0 -257
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.17.6
2
+ * Quasar Framework v2.18.0
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -490,7 +490,7 @@
490
490
  visualViewport.width * visualViewport.scale + window.innerWidth - scrollingElement.clientWidth,
491
491
  visualViewport.height * visualViewport.scale + window.innerHeight - scrollingElement.clientHeight
492
492
  ];
493
- const classes = $q.config.screen !== void 0 && $q.config.screen.bodyClasses === true;
493
+ const classes = $q.config.screen?.bodyClasses === true;
494
494
  this.__update = (force) => {
495
495
  const [w, h2] = getSize();
496
496
  if (h2 !== this.height) {
@@ -728,7 +728,7 @@
728
728
  if (false) {
729
729
  const { $q, ssrContext } = opts;
730
730
  const cls = getBodyClasses($q.platform, $q.config);
731
- if ($q.config.screen !== void 0 && $q.config.screen.bodyClass === true) {
731
+ if ($q.config.screen?.bodyClass === true) {
732
732
  cls.push("screen--xs");
733
733
  }
734
734
  ssrContext._meta.bodyClasses += cls.join(" ");
@@ -788,7 +788,7 @@
788
788
  const { cordova: cordova2, capacitor } = client.is;
789
789
  if (cordova2 !== true && capacitor !== true) return;
790
790
  const qConf = $q.config[cordova2 === true ? "cordova" : "capacitor"];
791
- if (qConf !== void 0 && qConf.backButton === false) return;
791
+ if (qConf?.backButton === false) return;
792
792
  if (
793
793
  // if we're on Capacitor mode
794
794
  capacitor === true && (window.Capacitor === void 0 || window.Capacitor.Plugins.App === void 0)
@@ -875,6 +875,12 @@
875
875
  pagination: (start, end, total) => start + "-" + end + " of " + total,
876
876
  columns: "Columns"
877
877
  },
878
+ pagination: {
879
+ first: "First page",
880
+ prev: "Previous page",
881
+ next: "Next page",
882
+ last: "Last page"
883
+ },
878
884
  editor: {
879
885
  url: "URL",
880
886
  bold: "Bold",
@@ -1378,7 +1384,7 @@
1378
1384
  }
1379
1385
  var install_quasar_default = false ? function(parentApp, opts = {}, ssrContext) {
1380
1386
  const $q = {
1381
- version: "2.17.6",
1387
+ version: "2.18.0",
1382
1388
  config: opts.config || {}
1383
1389
  };
1384
1390
  Object.assign(ssrContext, {
@@ -1408,7 +1414,7 @@
1408
1414
  ssrContext
1409
1415
  });
1410
1416
  } : function(parentApp, opts = {}) {
1411
- const $q = { version: "2.17.6" };
1417
+ const $q = { version: "2.18.0" };
1412
1418
  if (globalConfigIsFrozen === false) {
1413
1419
  if (opts.config !== void 0) {
1414
1420
  Object.assign(globalConfig, opts.config);
@@ -1867,7 +1873,9 @@
1867
1873
  "ion-logo": ionFn,
1868
1874
  "iconfont ": sameFn,
1869
1875
  "ti-": (i) => `themify-icon ${i}`,
1870
- "bi-": (i) => `bootstrap-icons ${i}`
1876
+ "bi-": (i) => `bootstrap-icons ${i}`,
1877
+ "i-": sameFn
1878
+ // UnoCSS pure icons
1871
1879
  };
1872
1880
  var matMap = {
1873
1881
  o_: "-outlined",
@@ -1987,8 +1995,7 @@
1987
1995
  const data = {
1988
1996
  class: classes.value,
1989
1997
  style: sizeStyle.value,
1990
- "aria-hidden": "true",
1991
- role: "presentation"
1998
+ "aria-hidden": "true"
1992
1999
  };
1993
2000
  if (type.value.none === true) {
1994
2001
  return h(props4.tag, data, hSlot(slots.default));
@@ -2259,9 +2266,9 @@
2259
2266
  );
2260
2267
  if (vnodes.length === 0) return;
2261
2268
  let els = 1;
2262
- const child = [], len = vnodes.filter((c) => c.type !== void 0 && c.type.name === "QBreadcrumbsEl").length, separator = slots.separator !== void 0 ? slots.separator : () => props4.separator;
2269
+ const child = [], len = vnodes.filter((c) => c.type?.name === "QBreadcrumbsEl").length, separator = slots.separator !== void 0 ? slots.separator : () => props4.separator;
2263
2270
  vnodes.forEach((comp) => {
2264
- if (comp.type !== void 0 && comp.type.name === "QBreadcrumbsEl") {
2271
+ if (comp.type?.name === "QBreadcrumbsEl") {
2265
2272
  const middle = els < len;
2266
2273
  const disabled = comp.props !== null && disabledValues.includes(comp.props.disable);
2267
2274
  const cls = (middle === true ? "" : " q-breadcrumbs--last") + (disabled !== true && middle === true ? activeClass.value : "");
@@ -2974,11 +2981,11 @@
2974
2981
  if (e.defaultPrevented === true) return;
2975
2982
  const el = document.activeElement;
2976
2983
  if (props4.type === "submit" && el !== document.body && rootRef.value.contains(el) === false && el.contains(rootRef.value) === false) {
2977
- rootRef.value.focus();
2984
+ e.qAvoidFocus !== true && rootRef.value.focus();
2978
2985
  const onClickCleanup = () => {
2979
2986
  document.removeEventListener("keydown", stopAndPrevent, true);
2980
2987
  document.removeEventListener("keyup", onClickCleanup, passiveCapture);
2981
- rootRef.value !== null && rootRef.value.removeEventListener("blur", onClickCleanup, passiveCapture);
2988
+ rootRef.value?.removeEventListener("blur", onClickCleanup, passiveCapture);
2982
2989
  };
2983
2990
  document.addEventListener("keydown", stopAndPrevent, true);
2984
2991
  document.addEventListener("keyup", onClickCleanup, passiveCapture);
@@ -2993,7 +3000,7 @@
2993
3000
  if (isKeyCode(e, [13, 32]) === true && keyboardTarget !== rootRef.value) {
2994
3001
  keyboardTarget !== null && cleanup();
2995
3002
  if (e.defaultPrevented !== true) {
2996
- rootRef.value.focus();
3003
+ e.qAvoidFocus !== true && rootRef.value.focus();
2997
3004
  keyboardTarget = rootRef.value;
2998
3005
  rootRef.value.classList.add("q-btn--active");
2999
3006
  document.addEventListener("keyup", onPressEnd, true);
@@ -3033,8 +3040,8 @@
3033
3040
  }
3034
3041
  function onPressEnd(e) {
3035
3042
  if (rootRef.value === null) return;
3036
- if (e !== void 0 && e.type === "blur" && document.activeElement === rootRef.value) return;
3037
- if (e !== void 0 && e.type === "keyup") {
3043
+ if (e?.type === "blur" && document.activeElement === rootRef.value) return;
3044
+ if (e?.type === "keyup") {
3038
3045
  if (keyboardTarget === rootRef.value && isKeyCode(e, [13, 32]) === true) {
3039
3046
  const evt = new MouseEvent("click", e);
3040
3047
  evt.qKeyEvent = true;
@@ -3067,10 +3074,10 @@
3067
3074
  }
3068
3075
  if (keyboardTarget === rootRef.value) {
3069
3076
  document.removeEventListener("keyup", onPressEnd, true);
3070
- rootRef.value !== null && rootRef.value.removeEventListener("blur", onPressEnd, passiveCapture);
3077
+ rootRef.value?.removeEventListener("blur", onPressEnd, passiveCapture);
3071
3078
  keyboardTarget = null;
3072
3079
  }
3073
- rootRef.value !== null && rootRef.value.classList.remove("q-btn--active");
3080
+ rootRef.value?.classList.remove("q-btn--active");
3074
3081
  }
3075
3082
  function onLoadingEvt(evt) {
3076
3083
  stopAndPrevent(evt);
@@ -3438,7 +3445,7 @@
3438
3445
  }
3439
3446
  }
3440
3447
  function show(evt) {
3441
- if (props4.disable === true || evt !== void 0 && evt.qAnchorHandled === true || canShow !== void 0 && canShow(evt) !== true) return;
3448
+ if (props4.disable === true || evt?.qAnchorHandled === true || canShow !== void 0 && canShow(evt) !== true) return;
3442
3449
  const listener = props4["onUpdate:modelValue"] !== void 0;
3443
3450
  if (listener === true && true) {
3444
3451
  emit("update:modelValue", true);
@@ -3604,7 +3611,7 @@
3604
3611
  }
3605
3612
  } else if (proxy.__qPortal === true) {
3606
3613
  const parent = getParentProxy(proxy);
3607
- if (parent !== void 0 && parent.$options.name === "QPopupProxy") {
3614
+ if (parent?.$options.name === "QPopupProxy") {
3608
3615
  proxy.hide(evt);
3609
3616
  return parent;
3610
3617
  } else {
@@ -4313,6 +4320,7 @@
4313
4320
  persistent: Boolean,
4314
4321
  autoClose: Boolean,
4315
4322
  separateClosePopup: Boolean,
4323
+ noEscDismiss: Boolean,
4316
4324
  noRouteDismiss: Boolean,
4317
4325
  noRefocus: Boolean,
4318
4326
  noFocus: Boolean,
@@ -4462,7 +4470,7 @@
4462
4470
  anchorCleanup(true);
4463
4471
  if (refocusTarget !== null && // menu was hidden from code or ESC plugin
4464
4472
  (evt === void 0 || evt.qClickOutside !== true)) {
4465
- ((evt && evt.type.indexOf("key") === 0 ? refocusTarget.closest('[tabindex]:not([tabindex^="-"])') : void 0) || refocusTarget).focus();
4473
+ ((evt?.type.indexOf("key") === 0 ? refocusTarget.closest('[tabindex]:not([tabindex^="-"])') : void 0) || refocusTarget).focus();
4466
4474
  refocusTarget = null;
4467
4475
  }
4468
4476
  registerTimeout(() => {
@@ -4506,8 +4514,10 @@
4506
4514
  }
4507
4515
  }
4508
4516
  function onEscapeKey(evt) {
4509
- emit("escapeKey");
4510
- hide(evt);
4517
+ if (props4.noEscDismiss !== true) {
4518
+ emit("escapeKey");
4519
+ hide(evt);
4520
+ }
4511
4521
  }
4512
4522
  function updatePosition() {
4513
4523
  setPosition({
@@ -4639,8 +4649,11 @@
4639
4649
  contentStyle: [Array, String, Object],
4640
4650
  cover: Boolean,
4641
4651
  persistent: Boolean,
4652
+ noEscDismiss: Boolean,
4642
4653
  noRouteDismiss: Boolean,
4643
4654
  autoClose: Boolean,
4655
+ noRefocus: Boolean,
4656
+ noFocus: Boolean,
4644
4657
  menuAnchor: {
4645
4658
  type: String,
4646
4659
  default: "bottom end"
@@ -4679,7 +4692,7 @@
4679
4692
  const btnDesignAttr = computed(() => getBtnDesignAttr(props4));
4680
4693
  const btnProps = computed(() => passBtnProps(props4));
4681
4694
  watch(() => props4.modelValue, (val) => {
4682
- menuRef.value !== null && menuRef.value[val ? "show" : "hide"]();
4695
+ menuRef.value?.[val ? "show" : "hide"]();
4683
4696
  });
4684
4697
  watch(() => props4.split, hide);
4685
4698
  function onBeforeShow(e) {
@@ -4707,13 +4720,13 @@
4707
4720
  emit("click", e);
4708
4721
  }
4709
4722
  function toggle(evt) {
4710
- menuRef.value !== null && menuRef.value.toggle(evt);
4723
+ menuRef.value?.toggle(evt);
4711
4724
  }
4712
4725
  function show(evt) {
4713
- menuRef.value !== null && menuRef.value.show(evt);
4726
+ menuRef.value?.show(evt);
4714
4727
  }
4715
4728
  function hide(evt) {
4716
- menuRef.value !== null && menuRef.value.hide(evt);
4729
+ menuRef.value?.hide(evt);
4717
4730
  }
4718
4731
  Object.assign(proxy, {
4719
4732
  show,
@@ -4739,8 +4752,11 @@
4739
4752
  cover: props4.cover,
4740
4753
  fit: true,
4741
4754
  persistent: props4.persistent,
4755
+ noEscDismiss: props4.noEscDismiss,
4742
4756
  noRouteDismiss: props4.noRouteDismiss,
4743
4757
  autoClose: props4.autoClose,
4758
+ noFocus: props4.noFocus,
4759
+ noRefocus: props4.noRefocus,
4744
4760
  anchor: props4.menuAnchor,
4745
4761
  self: props4.menuSelf,
4746
4762
  offset: props4.menuOffset,
@@ -5184,8 +5200,8 @@
5184
5200
  if (ctx.event === void 0) return;
5185
5201
  cleanEvt(ctx, "temp");
5186
5202
  client.is.firefox === true && preventDraggable(el, false);
5187
- ctx.styleCleanup !== void 0 && ctx.styleCleanup(true);
5188
- evt !== void 0 && ctx.event.dir !== false && stopAndPrevent(evt);
5203
+ ctx.styleCleanup?.(true);
5204
+ if (evt !== void 0 && ctx.event.dir !== false) stopAndPrevent(evt);
5189
5205
  ctx.event = void 0;
5190
5206
  }
5191
5207
  };
@@ -5218,7 +5234,7 @@
5218
5234
  cleanEvt(ctx, "main");
5219
5235
  cleanEvt(ctx, "temp");
5220
5236
  client.is.firefox === true && preventDraggable(el, false);
5221
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
5237
+ ctx.styleCleanup?.();
5222
5238
  delete el.__qtouchswipe;
5223
5239
  }
5224
5240
  }
@@ -5936,11 +5952,12 @@
5936
5952
  });
5937
5953
  function refocusTarget(e) {
5938
5954
  const root = rootRef.value;
5939
- if (e !== void 0 && e.type.indexOf("key") === 0) {
5940
- if (root !== null && document.activeElement !== root && root.contains(document.activeElement) === true) {
5955
+ if (e?.qAvoidFocus === true) return;
5956
+ if (e?.type.indexOf("key") === 0) {
5957
+ if (document.activeElement !== root && root?.contains(document.activeElement) === true) {
5941
5958
  root.focus();
5942
5959
  }
5943
- } else if (refocusRef.value !== null && (e === void 0 || root !== null && root.contains(e.target) === true)) {
5960
+ } else if (refocusRef.value !== null && (e === void 0 || root?.contains(e.target) === true)) {
5944
5961
  refocusRef.value.focus();
5945
5962
  }
5946
5963
  }
@@ -6687,7 +6704,7 @@
6687
6704
  cleanEvt(ctx, "temp");
6688
6705
  client.is.firefox === true && preventDraggable(el, false);
6689
6706
  if (abort === true) {
6690
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
6707
+ ctx.styleCleanup?.();
6691
6708
  if (ctx.event.detected !== true && ctx.initialEvent !== void 0) {
6692
6709
  ctx.initialEvent.target.dispatchEvent(ctx.initialEvent.event);
6693
6710
  }
@@ -6738,7 +6755,7 @@
6738
6755
  cleanEvt(ctx, "main");
6739
6756
  cleanEvt(ctx, "temp");
6740
6757
  client.is.firefox === true && preventDraggable(el, false);
6741
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
6758
+ ctx.styleCleanup?.();
6742
6759
  delete el.__qtouchpan;
6743
6760
  }
6744
6761
  }
@@ -7443,7 +7460,7 @@
7443
7460
  }
7444
7461
  }, onObjLoad = function() {
7445
7462
  cleanup();
7446
- if (targetEl && targetEl.contentDocument) {
7463
+ if (targetEl?.contentDocument) {
7447
7464
  curDocView = targetEl.contentDocument.defaultView;
7448
7465
  curDocView.addEventListener("resize", trigger3, listenOpts.passive);
7449
7466
  emitEvent();
@@ -7765,7 +7782,7 @@
7765
7782
  }
7766
7783
  function updateActiveRoute() {
7767
7784
  let name2 = null, bestScore = { matchedLen: 0, queryDiff: 9999, hrefLen: 0 };
7768
- const list = tabDataList.filter((tab) => tab.routeData !== void 0 && tab.routeData.hasRouterLink.value === true);
7785
+ const list = tabDataList.filter((tab) => tab.routeData?.hasRouterLink.value === true);
7769
7786
  const { hash: currentHash, query: currentQuery } = proxy.$route;
7770
7787
  const currentQueryLen = Object.keys(currentQuery).length;
7771
7788
  for (const tab of list) {
@@ -7898,7 +7915,7 @@
7898
7915
  function cleanup() {
7899
7916
  animateTimer !== null && clearTimeout(animateTimer);
7900
7917
  stopAnimScroll();
7901
- unwatchRoute !== void 0 && unwatchRoute();
7918
+ unwatchRoute?.();
7902
7919
  }
7903
7920
  let hadRouteWatcher, hadActivated;
7904
7921
  onBeforeUnmount(cleanup);
@@ -7995,11 +8012,11 @@
7995
8012
  );
7996
8013
  const tabIndex = computed(() => props4.disable === true || $tabs.hasFocus.value === true || isActive.value === false && $tabs.hasActiveTab.value === true ? -1 : props4.tabindex || 0);
7997
8014
  function onClick(e, keyboard) {
7998
- if (keyboard !== true && blurTargetRef.value !== null) {
7999
- blurTargetRef.value.focus();
8015
+ if (keyboard !== true && e?.qAvoidFocus !== true) {
8016
+ blurTargetRef.value?.focus();
8000
8017
  }
8001
8018
  if (props4.disable === true) {
8002
- if (routeData !== void 0 && routeData.hasRouterLink.value === true) {
8019
+ if (routeData?.hasRouterLink.value === true) {
8003
8020
  stopAndPrevent(e);
8004
8021
  }
8005
8022
  return;
@@ -8018,7 +8035,7 @@
8018
8035
  }).then((softError) => {
8019
8036
  if (reqId === $tabs.avoidRouteWatcher) {
8020
8037
  $tabs.avoidRouteWatcher = false;
8021
- if (hardError === void 0 && (softError === void 0 || softError.message !== void 0 && softError.message.startsWith("Avoided redundant navigation") === true)) {
8038
+ if (hardError === void 0 && (softError === void 0 || softError.message?.startsWith("Avoided redundant navigation") === true)) {
8022
8039
  $tabs.updateModel({ name: props4.name });
8023
8040
  }
8024
8041
  }
@@ -8675,7 +8692,7 @@
8675
8692
  model.value.v = hsv.v;
8676
8693
  }
8677
8694
  updateModel2(rgb2, change);
8678
- if (evt !== void 0 && change !== true && evt.target.selectionEnd !== void 0) {
8695
+ if (change !== true && evt?.target.selectionEnd !== void 0) {
8679
8696
  const index = evt.target.selectionEnd;
8680
8697
  nextTick(() => {
8681
8698
  evt.target.setSelectionRange(index, index);
@@ -10580,7 +10597,7 @@
10580
10597
  });
10581
10598
  const attributes = computed(() => props4.disable === true ? { "aria-disabled": "true" } : {});
10582
10599
  watch(() => props4.modelValue, (v) => {
10583
- if (lastEmitValue === v) {
10600
+ if (lastEmitValue === JSON.stringify(v)) {
10584
10601
  lastEmitValue = 0;
10585
10602
  } else {
10586
10603
  const model = getViewModel(innerMask.value, innerLocale.value);
@@ -10603,6 +10620,9 @@
10603
10620
  updateValue2(innerMask.value, val, "locale");
10604
10621
  innerLocale.value = val;
10605
10622
  });
10623
+ function setLastValue(v) {
10624
+ lastEmitValue = JSON.stringify(v);
10625
+ }
10606
10626
  function setToday() {
10607
10627
  const { year: year2, month, day } = today.value;
10608
10628
  const date = {
@@ -10732,7 +10752,7 @@
10732
10752
  }
10733
10753
  function toggleDate(date, monthHash) {
10734
10754
  const month = daysMap.value[monthHash];
10735
- const fn = month !== void 0 && month.includes(date.day) === true ? removeFromModel : addToModel;
10755
+ const fn = month?.includes(date.day) === true ? removeFromModel : addToModel;
10736
10756
  fn(date);
10737
10757
  }
10738
10758
  function getShortDate(date) {
@@ -10774,8 +10794,8 @@
10774
10794
  }
10775
10795
  function emitValue(val, action, date) {
10776
10796
  const value2 = val !== null && val.length === 1 && props4.multiple === false ? val[0] : val;
10777
- lastEmitValue = value2;
10778
10797
  const { reason, details } = getEmitParams(action, date);
10798
+ setLastValue(value2);
10779
10799
  emit("update:modelValue", value2, reason, details);
10780
10800
  }
10781
10801
  function emitImmediately(reason) {
@@ -10786,8 +10806,8 @@
10786
10806
  const maxDay = props4.calendar !== "persian" ? new Date(date.year, date.month, 0).getDate() : jalaaliMonthLength(date.year, date.month);
10787
10807
  date.day = Math.min(Math.max(1, date.day), maxDay);
10788
10808
  const value2 = encodeEntry(date);
10789
- lastEmitValue = value2;
10790
10809
  const { details } = getEmitParams("", date);
10810
+ setLastValue(value2);
10791
10811
  emit("update:modelValue", value2, reason, details);
10792
10812
  });
10793
10813
  }
@@ -10848,7 +10868,9 @@
10848
10868
  const model = daysModel.value.concat(rangeModel.value).map((entry) => encodeEntry(entry, mask2, locale2)).filter((entry) => {
10849
10869
  return entry.from !== void 0 ? entry.from.dateHash !== null && entry.to.dateHash !== null : entry.dateHash !== null;
10850
10870
  });
10851
- emit("update:modelValue", (props4.multiple === true ? model : model[0]) || null, reason);
10871
+ const value2 = (props4.multiple === true ? model : model[0]) || null;
10872
+ setLastValue(value2);
10873
+ emit("update:modelValue", value2, reason);
10852
10874
  }
10853
10875
  function getHeader() {
10854
10876
  if (props4.minimal === true) return;
@@ -11498,7 +11520,7 @@
11498
11520
  showPortal();
11499
11521
  animating.value = true;
11500
11522
  if (props4.noFocus !== true) {
11501
- document.activeElement !== null && document.activeElement.blur();
11523
+ document.activeElement?.blur();
11502
11524
  registerTick(focus);
11503
11525
  } else {
11504
11526
  removeTick();
@@ -11531,7 +11553,7 @@
11531
11553
  animating.value = true;
11532
11554
  hidePortal();
11533
11555
  if (refocusTarget !== null) {
11534
- ((evt && evt.type.indexOf("key") === 0 ? refocusTarget.closest('[tabindex]:not([tabindex^="-"])') : void 0) || refocusTarget).focus();
11556
+ ((evt?.type.indexOf("key") === 0 ? refocusTarget.closest('[tabindex]:not([tabindex^="-"])') : void 0) || refocusTarget).focus();
11535
11557
  refocusTarget = null;
11536
11558
  }
11537
11559
  registerTimeout(() => {
@@ -11760,7 +11782,7 @@
11760
11782
  applyPosition(0);
11761
11783
  if (belowBreakpoint.value === true) {
11762
11784
  const otherInstance = $layout.instances[otherSide.value];
11763
- if (otherInstance !== void 0 && otherInstance.belowBreakpoint === true) {
11785
+ if (otherInstance?.belowBreakpoint === true) {
11764
11786
  otherInstance.hide(false);
11765
11787
  }
11766
11788
  applyBackdrop(1);
@@ -12000,9 +12022,7 @@
12000
12022
  timerMini = setTimeout(() => {
12001
12023
  timerMini = null;
12002
12024
  flagMiniAnimate.value = false;
12003
- if (vm2 && vm2.proxy && vm2.proxy.$el) {
12004
- vm2.proxy.$el.classList.remove("q-drawer--mini-animate");
12005
- }
12025
+ vm2?.proxy?.$el?.classList.remove("q-drawer--mini-animate");
12006
12026
  }, 150);
12007
12027
  }
12008
12028
  function onOpenPan(evt) {
@@ -12100,7 +12120,7 @@
12100
12120
  });
12101
12121
  });
12102
12122
  onBeforeUnmount(() => {
12103
- layoutTotalWidthWatcher !== void 0 && layoutTotalWidthWatcher();
12123
+ layoutTotalWidthWatcher?.();
12104
12124
  if (timerMini !== null) {
12105
12125
  clearTimeout(timerMini);
12106
12126
  timerMini = null;
@@ -12244,7 +12264,7 @@
12244
12264
  }
12245
12265
  get range() {
12246
12266
  const sel = this.selection;
12247
- if (sel !== null && sel.rangeCount) {
12267
+ if (sel?.rangeCount) {
12248
12268
  return sel.getRangeAt(0);
12249
12269
  }
12250
12270
  return this._range;
@@ -12706,7 +12726,7 @@
12706
12726
  });
12707
12727
  function onClick(e) {
12708
12728
  if (isClickable.value === true) {
12709
- if (blurTargetRef.value !== null) {
12729
+ if (blurTargetRef.value !== null && e.qAvoidFocus !== true) {
12710
12730
  if (e.qKeyEvent !== true && document.activeElement === rootRef.value) {
12711
12731
  blurTargetRef.value.focus();
12712
12732
  } else if (document.activeElement === blurTargetRef.value) {
@@ -12808,7 +12828,7 @@
12808
12828
  disable: btn.disable ? typeof btn.disable === "function" ? btn.disable(eVm) : true : false,
12809
12829
  size: "sm",
12810
12830
  onClick(e) {
12811
- clickHandler && clickHandler();
12831
+ clickHandler?.();
12812
12832
  run(e, btn, eVm);
12813
12833
  }
12814
12834
  }, () => child);
@@ -12852,7 +12872,7 @@
12852
12872
  dense: true,
12853
12873
  onClick(e) {
12854
12874
  closeDropdown();
12855
- eVm.contentRef.value !== null && eVm.contentRef.value.focus();
12875
+ e?.qAvoidFocus !== true && eVm.contentRef.value?.focus();
12856
12876
  eVm.caret.restore();
12857
12877
  run(e, btn2, eVm);
12858
12878
  }
@@ -13425,7 +13445,7 @@
13425
13445
  }
13426
13446
  function focus() {
13427
13447
  addFocusFn(() => {
13428
- contentRef.value !== null && contentRef.value.focus({ preventScroll: true });
13448
+ contentRef.value?.focus({ preventScroll: true });
13429
13449
  });
13430
13450
  }
13431
13451
  function getContentEl() {
@@ -13541,7 +13561,7 @@
13541
13561
  let animating = false, doneFn, element;
13542
13562
  let timer2 = null, timerFallback = null, animListener, lastEvent;
13543
13563
  function cleanup() {
13544
- doneFn && doneFn();
13564
+ doneFn?.();
13545
13565
  doneFn = null;
13546
13566
  animating = false;
13547
13567
  if (timer2 !== null) {
@@ -13552,7 +13572,7 @@
13552
13572
  clearTimeout(timerFallback);
13553
13573
  timerFallback = null;
13554
13574
  }
13555
- element !== void 0 && element.removeEventListener("transitionend", animListener);
13575
+ element?.removeEventListener("transitionend", animListener);
13556
13576
  animListener = null;
13557
13577
  }
13558
13578
  function begin(el, height2, done) {
@@ -13777,7 +13797,7 @@
13777
13797
  };
13778
13798
  });
13779
13799
  watch(() => props4.group, (name2) => {
13780
- exitGroup !== void 0 && exitGroup();
13800
+ exitGroup?.();
13781
13801
  name2 !== void 0 && enterGroup();
13782
13802
  });
13783
13803
  function onHeaderClick(e) {
@@ -13788,7 +13808,9 @@
13788
13808
  e.keyCode === 13 && toggleIcon(e, true);
13789
13809
  }
13790
13810
  function toggleIcon(e, keyboard) {
13791
- keyboard !== true && blurTargetRef.value !== null && blurTargetRef.value.focus();
13811
+ if (keyboard !== true && e.qAvoidFocus !== true) {
13812
+ blurTargetRef.value?.focus();
13813
+ }
13792
13814
  toggle(e);
13793
13815
  stopAndPrevent(e);
13794
13816
  }
@@ -13945,7 +13967,7 @@
13945
13967
  }
13946
13968
  props4.group !== void 0 && enterGroup();
13947
13969
  onBeforeUnmount(() => {
13948
- exitGroup !== void 0 && exitGroup();
13970
+ exitGroup?.();
13949
13971
  });
13950
13972
  return () => h("div", { class: classes.value }, [
13951
13973
  h("div", { class: "q-expansion-item__container relative-position" }, getContent())
@@ -14106,8 +14128,8 @@
14106
14128
  showing,
14107
14129
  onChildClick(evt) {
14108
14130
  hide(evt);
14109
- if (triggerRef.value !== null) {
14110
- triggerRef.value.$el.focus();
14131
+ if (evt?.qAvoidFocus !== true) {
14132
+ triggerRef.value?.$el.focus();
14111
14133
  }
14112
14134
  }
14113
14135
  });
@@ -14361,7 +14383,7 @@
14361
14383
  }
14362
14384
  const debouncedValidate = debounce_default(validate, 0);
14363
14385
  onBeforeUnmount(() => {
14364
- unwatchRules !== void 0 && unwatchRules();
14386
+ unwatchRules?.();
14365
14387
  debouncedValidate.cancel();
14366
14388
  });
14367
14389
  Object.assign(proxy, { resetValidation, validate });
@@ -14551,11 +14573,11 @@
14551
14573
  });
14552
14574
  function focusHandler() {
14553
14575
  const el = document.activeElement;
14554
- let target2 = state.targetRef !== void 0 && state.targetRef.value;
14576
+ let target2 = state.targetRef?.value;
14555
14577
  if (target2 && (el === null || el.id !== state.targetUid.value)) {
14556
14578
  target2.hasAttribute("tabindex") === true || (target2 = target2.querySelector("[tabindex]"));
14557
- if (target2 && target2 !== el) {
14558
- target2.focus({ preventScroll: true });
14579
+ if (target2 !== el) {
14580
+ target2?.focus({ preventScroll: true });
14559
14581
  }
14560
14582
  }
14561
14583
  }
@@ -14588,13 +14610,13 @@
14588
14610
  state.focused.value = false;
14589
14611
  emit("blur", e);
14590
14612
  }
14591
- then !== void 0 && then();
14613
+ then?.();
14592
14614
  });
14593
14615
  }
14594
14616
  function clearValue(e) {
14595
14617
  stopAndPrevent(e);
14596
14618
  if ($q.platform.is.mobile !== true) {
14597
- const el = state.targetRef !== void 0 && state.targetRef.value || state.rootRef.value;
14619
+ const el = state.targetRef?.value || state.rootRef.value;
14598
14620
  el.focus();
14599
14621
  } else if (state.rootRef.value.contains(document.activeElement) === true) {
14600
14622
  document.activeElement.blur();
@@ -14835,7 +14857,9 @@
14835
14857
  return acceptedFiles;
14836
14858
  }
14837
14859
  function stopAndPreventDrag(e) {
14838
- e && e.dataTransfer && (e.dataTransfer.dropEffect = "copy");
14860
+ if (e?.dataTransfer) {
14861
+ e.dataTransfer.dropEffect = "copy";
14862
+ }
14839
14863
  stopAndPrevent(e);
14840
14864
  }
14841
14865
  var useFileProps = {
@@ -14872,11 +14896,11 @@
14872
14896
  if (e !== Object(e)) {
14873
14897
  e = { target: null };
14874
14898
  }
14875
- if (e.target !== null && e.target.matches('input[type="file"]') === true) {
14899
+ if (e.target?.matches('input[type="file"]') === true) {
14876
14900
  e.clientX === 0 && e.clientY === 0 && stop(e);
14877
14901
  } else {
14878
14902
  const input = getFileInput();
14879
- input && input !== e.target && input.click(e);
14903
+ if (input !== e.target) input?.click(e);
14880
14904
  }
14881
14905
  }
14882
14906
  }
@@ -15436,7 +15460,7 @@
15436
15460
  if (index === validateIndex && val === true) {
15437
15461
  if (props4.onSubmit !== void 0) {
15438
15462
  emit("submit", evt);
15439
- } else if (evt !== void 0 && evt.target !== void 0 && typeof evt.target.submit === "function") {
15463
+ } else if (evt?.target !== void 0 && typeof evt.target.submit === "function") {
15440
15464
  evt.target.submit();
15441
15465
  }
15442
15466
  }
@@ -15456,7 +15480,7 @@
15456
15480
  addFocusFn(() => {
15457
15481
  if (rootRef.value === null) return;
15458
15482
  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);
15459
- target2 !== null && target2 !== void 0 && target2.focus({ preventScroll: true });
15483
+ target2?.focus({ preventScroll: true });
15460
15484
  });
15461
15485
  }
15462
15486
  provide(formKey, {
@@ -15524,12 +15548,14 @@
15524
15548
  }
15525
15549
  },
15526
15550
  mounted() {
15527
- const $form = this.$.provides[formKey];
15528
- $form !== void 0 && this.disable !== true && $form.bindComponent(this);
15551
+ if (this.disable !== true) {
15552
+ this.$.provides[formKey]?.bindComponent(this);
15553
+ }
15529
15554
  },
15530
15555
  beforeUnmount() {
15531
- const $form = this.$.provides[formKey];
15532
- $form !== void 0 && this.disable !== true && $form.unbindComponent(this);
15556
+ if (this.disable !== true) {
15557
+ this.$.provides[formKey]?.unbindComponent(this);
15558
+ }
15533
15559
  }
15534
15560
  };
15535
15561
 
@@ -16001,9 +16027,7 @@
16001
16027
  isWorking.value = false;
16002
16028
  isFetching.value = false;
16003
16029
  localScrollTarget.removeEventListener("scroll", poll, passive2);
16004
- if (poll !== void 0 && poll.cancel !== void 0) {
16005
- poll.cancel();
16006
- }
16030
+ poll?.cancel?.();
16007
16031
  }
16008
16032
  }
16009
16033
  function updateScrollTarget() {
@@ -16088,7 +16112,7 @@
16088
16112
  const vm2 = getCurrentInstance();
16089
16113
  Object.assign(vm2.proxy, {
16090
16114
  poll: () => {
16091
- poll !== void 0 && poll();
16115
+ poll?.();
16092
16116
  },
16093
16117
  trigger: trigger3,
16094
16118
  stop: stop2,
@@ -16694,7 +16718,7 @@
16694
16718
  });
16695
16719
  }
16696
16720
  function select() {
16697
- inputRef.value !== null && inputRef.value.select();
16721
+ inputRef.value?.select();
16698
16722
  }
16699
16723
  function onPaste(e) {
16700
16724
  if (hasMask.value === true && props4.reverseFillMask !== true) {
@@ -16787,7 +16811,7 @@
16787
16811
  clearTimeout(emitTimer);
16788
16812
  emitTimer = null;
16789
16813
  }
16790
- emitValueFn !== void 0 && emitValueFn();
16814
+ emitValueFn?.();
16791
16815
  emit("change", e.target.value);
16792
16816
  }
16793
16817
  function onFinishEditing(e) {
@@ -16796,7 +16820,7 @@
16796
16820
  clearTimeout(emitTimer);
16797
16821
  emitTimer = null;
16798
16822
  }
16799
- emitValueFn !== void 0 && emitValueFn();
16823
+ emitValueFn?.();
16800
16824
  typedNumber = false;
16801
16825
  stopValueWatcher = false;
16802
16826
  delete temp.value;
@@ -16885,7 +16909,7 @@
16885
16909
  }
16886
16910
  if (changed2 === true) {
16887
16911
  ctx.cfg = cfg;
16888
- ctx.observer !== void 0 && ctx.observer.unobserve(el);
16912
+ ctx.observer?.unobserve(el);
16889
16913
  ctx.observer = new IntersectionObserver(([entry]) => {
16890
16914
  if (typeof ctx.handler === "function") {
16891
16915
  if (entry.rootBounds === null && document.body.contains(el) === true) {
@@ -16905,7 +16929,7 @@
16905
16929
  function destroy(el) {
16906
16930
  const ctx = el.__qvisible;
16907
16931
  if (ctx !== void 0) {
16908
- ctx.observer !== void 0 && ctx.observer.unobserve(el);
16932
+ ctx.observer?.unobserve(el);
16909
16933
  delete el.__qvisible;
16910
16934
  }
16911
16935
  }
@@ -17258,7 +17282,7 @@
17258
17282
  configureScrollTarget();
17259
17283
  });
17260
17284
  function emitEvent() {
17261
- clearTimer !== null && clearTimer();
17285
+ clearTimer?.();
17262
17286
  const top = Math.max(0, getVerticalScrollPosition(localScrollTarget));
17263
17287
  const left = getHorizontalScrollPosition(localScrollTarget);
17264
17288
  const delta = {
@@ -17305,7 +17329,7 @@
17305
17329
  configureScrollTarget();
17306
17330
  });
17307
17331
  onBeforeUnmount(() => {
17308
- clearTimer !== null && clearTimer();
17332
+ clearTimer?.();
17309
17333
  unconfigureScrollTarget();
17310
17334
  });
17311
17335
  Object.assign(proxy, {
@@ -18333,14 +18357,16 @@
18333
18357
  getBtn2({
18334
18358
  key: "bls",
18335
18359
  disable: props4.disable || props4.modelValue <= minProp.value,
18336
- icon: icons.value[0]
18360
+ icon: icons.value[0],
18361
+ "aria-label": $q.lang.pagination.first
18337
18362
  }, minProp.value)
18338
18363
  );
18339
18364
  contentEnd.unshift(
18340
18365
  getBtn2({
18341
18366
  key: "ble",
18342
18367
  disable: props4.disable || props4.modelValue >= maxProp.value,
18343
- icon: icons.value[3]
18368
+ icon: icons.value[3],
18369
+ "aria-label": $q.lang.pagination.last
18344
18370
  }, maxProp.value)
18345
18371
  );
18346
18372
  }
@@ -18349,14 +18375,16 @@
18349
18375
  getBtn2({
18350
18376
  key: "bdp",
18351
18377
  disable: props4.disable || props4.modelValue <= minProp.value,
18352
- icon: icons.value[1]
18378
+ icon: icons.value[1],
18379
+ "aria-label": $q.lang.pagination.prev
18353
18380
  }, props4.modelValue - 1)
18354
18381
  );
18355
18382
  contentEnd.unshift(
18356
18383
  getBtn2({
18357
18384
  key: "bdn",
18358
18385
  disable: props4.disable || props4.modelValue >= maxProp.value,
18359
- icon: icons.value[2]
18386
+ icon: icons.value[2],
18387
+ "aria-label": $q.lang.pagination.next
18360
18388
  }, props4.modelValue + 1)
18361
18389
  );
18362
18390
  }
@@ -18572,7 +18600,7 @@
18572
18600
  });
18573
18601
  onBeforeUnmount(() => {
18574
18602
  stop2();
18575
- observer !== void 0 && observer.disconnect();
18603
+ observer?.disconnect();
18576
18604
  mediaEl.onload = mediaEl.onloadstart = mediaEl.loadedmetadata = null;
18577
18605
  });
18578
18606
  return () => {
@@ -18760,10 +18788,10 @@
18760
18788
  set: set2,
18761
18789
  cancel,
18762
18790
  show(e) {
18763
- menuRef.value !== null && menuRef.value.show(e);
18791
+ menuRef.value?.show(e);
18764
18792
  },
18765
18793
  hide(e) {
18766
- menuRef.value !== null && menuRef.value.hide(e);
18794
+ menuRef.value?.hide(e);
18767
18795
  },
18768
18796
  updatePosition
18769
18797
  });
@@ -19059,7 +19087,7 @@
19059
19087
  timer2 = setTimeout(() => {
19060
19088
  timer2 = null;
19061
19089
  animating.value = false;
19062
- done && done();
19090
+ done?.();
19063
19091
  }, 300);
19064
19092
  }
19065
19093
  function updateScrollTarget() {
@@ -20021,7 +20049,7 @@
20021
20049
  delete el2.dataset.qVsAnchor;
20022
20050
  });
20023
20051
  const el = children[index];
20024
- if (el && el.dataset) {
20052
+ if (el?.dataset) {
20025
20053
  el.dataset.qVsAnchor = "";
20026
20054
  }
20027
20055
  });
@@ -20293,7 +20321,7 @@
20293
20321
  if (rangeChanged === true && contentEl !== null && contentEl !== activeElement && contentEl.contains(activeElement) === true) {
20294
20322
  contentEl.addEventListener("focusout", onBlurRefocusFn);
20295
20323
  setTimeout(() => {
20296
- contentEl !== null && contentEl.removeEventListener("focusout", onBlurRefocusFn);
20324
+ contentEl?.removeEventListener("focusout", onBlurRefocusFn);
20297
20325
  });
20298
20326
  }
20299
20327
  setOverflowAnchor(contentEl, toIndex - from);
@@ -20357,7 +20385,7 @@
20357
20385
  }
20358
20386
  }
20359
20387
  function onBlurRefocusFn() {
20360
- contentRef.value !== null && contentRef.value !== void 0 && contentRef.value.focus();
20388
+ contentRef.value?.focus();
20361
20389
  }
20362
20390
  function localResetVirtualScroll(toIndex, fullReset) {
20363
20391
  const defaultSize = 1 * virtualScrollItemSizeComputed.value;
@@ -20695,7 +20723,7 @@
20695
20723
  () => innerValue.value.map((opt) => getOptionLabel.value(opt)).join(", ")
20696
20724
  );
20697
20725
  const ariaCurrentValue = computed(() => props4.displayValue !== void 0 ? props4.displayValue : selectedString.value);
20698
- const needsHtmlFn = computed(() => props4.optionsHtml === true ? () => true : (opt) => opt !== void 0 && opt !== null && opt.html === true);
20726
+ const needsHtmlFn = computed(() => props4.optionsHtml === true ? () => true : (opt) => opt?.html === true);
20699
20727
  const valueAsHtml = computed(() => props4.displayValueHtml === true || props4.displayValue === void 0 && (props4.optionsHtml === true || innerValue.value.some(needsHtmlFn.value)));
20700
20728
  const tabindex = computed(() => state.focused.value === true ? props4.tabindex : -1);
20701
20729
  const comboboxAttrs = computed(() => {
@@ -20869,13 +20897,15 @@
20869
20897
  );
20870
20898
  hidePopup();
20871
20899
  }
20872
- targetRef.value !== null && targetRef.value.focus();
20900
+ targetRef.value?.focus();
20873
20901
  if (innerValue.value.length === 0 || isDeepEqual(getOptionValue.value(innerValue.value[0]), optValue) !== true) {
20874
20902
  emit("update:modelValue", props4.emitValue === true ? optValue : opt);
20875
20903
  }
20876
20904
  return;
20877
20905
  }
20878
- (hasDialog !== true || dialogFieldFocused.value === true) && state.focus();
20906
+ if (hasDialog !== true || dialogFieldFocused.value === true) {
20907
+ state.focus();
20908
+ }
20879
20909
  selectInputText();
20880
20910
  if (innerValue.value.length === 0) {
20881
20911
  const val = props4.emitValue === true ? optValue : opt;
@@ -21080,7 +21110,7 @@
21080
21110
  const fn = mode === "toggle" ? toggleOption : add;
21081
21111
  fn(val, mode === "add-unique");
21082
21112
  if (props4.multiple !== true) {
21083
- targetRef.value !== null && targetRef.value.focus();
21113
+ targetRef.value?.focus();
21084
21114
  hidePopup();
21085
21115
  }
21086
21116
  };
@@ -21325,7 +21355,7 @@
21325
21355
  }
21326
21356
  function onDialogFieldFocus(e) {
21327
21357
  stop(e);
21328
- targetRef.value !== null && targetRef.value.focus();
21358
+ targetRef.value?.focus();
21329
21359
  dialogFieldFocused.value = true;
21330
21360
  window.scrollTo(window.pageXOffset || window.scrollX || document.body.scrollLeft || 0, 0);
21331
21361
  }
@@ -21554,7 +21584,7 @@
21554
21584
  prevent(e);
21555
21585
  if (hasDialog !== true && menu.value === true) {
21556
21586
  closeMenu();
21557
- targetRef.value !== null && targetRef.value.focus();
21587
+ targetRef.value?.focus();
21558
21588
  return;
21559
21589
  }
21560
21590
  showPopup(e);
@@ -22503,7 +22533,7 @@
22503
22533
  });
22504
22534
  const ripple = computed(() => props4.stepper.headerNav !== true ? false : headerNav.value);
22505
22535
  function onActivate() {
22506
- blurRef.value !== null && blurRef.value.focus();
22536
+ blurRef.value?.focus();
22507
22537
  isActive.value === false && props4.goToPanel(props4.step.name);
22508
22538
  }
22509
22539
  function onKeyup2(e) {
@@ -22993,7 +23023,7 @@
22993
23023
  col = col.name;
22994
23024
  } else {
22995
23025
  const def = colList.value.find((def2) => def2.name === col);
22996
- if (def !== void 0 && def.sortOrder) {
23026
+ if (def?.sortOrder) {
22997
23027
  sortOrder = def.sortOrder;
22998
23028
  }
22999
23029
  }
@@ -23423,10 +23453,14 @@
23423
23453
  tableClass: [String, Array, Object],
23424
23454
  tableHeaderStyle: [String, Array, Object],
23425
23455
  tableHeaderClass: [String, Array, Object],
23456
+ tableRowStyleFn: Function,
23457
+ tableRowClassFn: Function,
23426
23458
  cardContainerClass: [String, Array, Object],
23427
23459
  cardContainerStyle: [String, Array, Object],
23428
23460
  cardStyle: [String, Array, Object],
23429
23461
  cardClass: [String, Array, Object],
23462
+ cardStyleFn: Function,
23463
+ cardClassFn: Function,
23430
23464
  hideBottom: Boolean,
23431
23465
  hideSelectedBanner: Boolean,
23432
23466
  hideNoData: Boolean,
@@ -23462,16 +23496,16 @@
23462
23496
  const cardDefaultClass = computed(
23463
23497
  () => " 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" : "")
23464
23498
  );
23465
- const __containerClass = computed(
23499
+ const containerClass = computed(
23466
23500
  () => `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" : "")
23467
23501
  );
23468
- const containerClass = computed(
23469
- () => __containerClass.value + (props4.loading === true ? " q-table--loading" : "")
23502
+ const rootContainerClass = computed(
23503
+ () => containerClass.value + (props4.loading === true ? " q-table--loading" : "")
23470
23504
  );
23471
23505
  watch(
23472
- () => props4.tableStyle + props4.tableClass + props4.tableHeaderStyle + props4.tableHeaderClass + __containerClass.value,
23506
+ () => props4.tableStyle + props4.tableClass + props4.tableHeaderStyle + props4.tableHeaderClass + containerClass.value,
23473
23507
  () => {
23474
- hasVirtScroll.value === true && virtScrollRef.value !== null && virtScrollRef.value.reset();
23508
+ hasVirtScroll.value === true && virtScrollRef.value?.reset();
23475
23509
  }
23476
23510
  );
23477
23511
  const {
@@ -23639,13 +23673,23 @@
23639
23673
  function getTBodyTR(row, bodySlot, pageIndex) {
23640
23674
  const key = getRowKey.value(row), selected = isRowSelected(key);
23641
23675
  if (bodySlot !== void 0) {
23676
+ const cfg = {
23677
+ key,
23678
+ row,
23679
+ pageIndex,
23680
+ __trClass: selected ? "selected" : ""
23681
+ };
23682
+ if (props4.tableRowStyleFn !== void 0) {
23683
+ cfg.__trStyle = props4.tableRowStyleFn(row);
23684
+ }
23685
+ if (props4.tableRowClassFn !== void 0) {
23686
+ const cls = props4.tableRowClassFn(row);
23687
+ if (cls) {
23688
+ cfg.__trClass = `${cls} ${cfg.__trClass}`;
23689
+ }
23690
+ }
23642
23691
  return bodySlot(
23643
- getBodyScope({
23644
- key,
23645
- row,
23646
- pageIndex,
23647
- __trClass: selected ? "selected" : ""
23648
- })
23692
+ getBodyScope(cfg)
23649
23693
  );
23650
23694
  }
23651
23695
  const bodyCell = slots["body-cell"], child = computedCols.value.map((col) => {
@@ -23691,6 +23735,15 @@
23691
23735
  emit("rowContextmenu", evt, row, pageIndex);
23692
23736
  };
23693
23737
  }
23738
+ if (props4.tableRowStyleFn !== void 0) {
23739
+ data.style = props4.tableRowStyleFn(row);
23740
+ }
23741
+ if (props4.tableRowClassFn !== void 0) {
23742
+ const cls = props4.tableRowClassFn(row);
23743
+ if (cls) {
23744
+ data.class[cls] = true;
23745
+ }
23746
+ }
23694
23747
  return h("tr", data, child);
23695
23748
  }
23696
23749
  function getTBody() {
@@ -23944,28 +23997,26 @@
23944
23997
  child.push(
23945
23998
  h("div", { class: "q-table__separator col" })
23946
23999
  );
23947
- if (hasOpts === true) {
23948
- child.push(
23949
- h("div", { class: "q-table__control" }, [
23950
- h("span", { class: "q-table__bottom-item" }, [
23951
- props4.rowsPerPageLabel || $q.lang.table.recordsPerPage
23952
- ]),
23953
- h(QSelect_default, {
23954
- class: "q-table__select inline q-table__bottom-item",
23955
- color: props4.color,
23956
- modelValue: rowsPerPage,
23957
- options: computedRowsPerPageOptions.value,
23958
- displayValue: rowsPerPage === 0 ? $q.lang.table.allRows : rowsPerPage,
23959
- dark: isDark.value,
23960
- borderless: true,
23961
- dense: true,
23962
- optionsDense: true,
23963
- optionsCover: true,
23964
- "onUpdate:modelValue": onPagSelection
23965
- })
23966
- ])
23967
- );
23968
- }
24000
+ hasOpts === true && child.push(
24001
+ h("div", { class: "q-table__control" }, [
24002
+ h("span", { class: "q-table__bottom-item" }, [
24003
+ props4.rowsPerPageLabel || $q.lang.table.recordsPerPage
24004
+ ]),
24005
+ h(QSelect_default, {
24006
+ class: "q-table__select inline q-table__bottom-item",
24007
+ color: props4.color,
24008
+ modelValue: rowsPerPage,
24009
+ options: computedRowsPerPageOptions.value,
24010
+ displayValue: rowsPerPage === 0 ? $q.lang.table.allRows : rowsPerPage,
24011
+ dark: isDark.value,
24012
+ borderless: true,
24013
+ dense: true,
24014
+ optionsDense: true,
24015
+ optionsCover: true,
24016
+ "onUpdate:modelValue": onPagSelection
24017
+ })
24018
+ ])
24019
+ );
23969
24020
  if (paginationSlot !== void 0) {
23970
24021
  control = paginationSlot(marginalsScope.value);
23971
24022
  } else {
@@ -23990,6 +24041,7 @@
23990
24041
  ...btnProps,
23991
24042
  icon: navIcon.value[0],
23992
24043
  disable: isFirstPage.value,
24044
+ ariaLabel: $q.lang.pagination.first,
23993
24045
  onClick: firstPage
23994
24046
  })
23995
24047
  );
@@ -23999,6 +24051,7 @@
23999
24051
  ...btnProps,
24000
24052
  icon: navIcon.value[1],
24001
24053
  disable: isFirstPage.value,
24054
+ ariaLabel: $q.lang.pagination.prev,
24002
24055
  onClick: prevPage
24003
24056
  }),
24004
24057
  h(QBtn_default, {
@@ -24006,6 +24059,7 @@
24006
24059
  ...btnProps,
24007
24060
  icon: navIcon.value[2],
24008
24061
  disable: isLastPage.value,
24062
+ ariaLabel: $q.lang.pagination.next,
24009
24063
  onClick: nextPage
24010
24064
  })
24011
24065
  );
@@ -24015,6 +24069,7 @@
24015
24069
  ...btnProps,
24016
24070
  icon: navIcon.value[3],
24017
24071
  disable: isLastPage.value,
24072
+ ariaLabel: $q.lang.pagination.last,
24018
24073
  onClick: lastPage
24019
24074
  })
24020
24075
  );
@@ -24066,7 +24121,16 @@
24066
24121
  ],
24067
24122
  style: props4.cardStyle
24068
24123
  };
24069
- if (props4.onRowClick !== void 0 || props4.onRowDblclick !== void 0) {
24124
+ if (props4.cardStyleFn !== void 0) {
24125
+ data.style = [data.style, props4.cardStyleFn(scope.row)];
24126
+ }
24127
+ if (props4.cardClassFn !== void 0) {
24128
+ const cls = props4.cardClassFn(scope.row);
24129
+ if (cls) {
24130
+ data.class[0] += ` ${cls}`;
24131
+ }
24132
+ }
24133
+ if (props4.onRowClick !== void 0 || props4.onRowDblclick !== void 0 || props4.onRowContextmenu !== void 0) {
24070
24134
  data.class[0] += " cursor-pointer";
24071
24135
  if (props4.onRowClick !== void 0) {
24072
24136
  data.onClick = (evt) => {
@@ -24078,6 +24142,11 @@
24078
24142
  emit("RowDblclick", evt, scope.row, scope.pageIndex);
24079
24143
  };
24080
24144
  }
24145
+ if (props4.onRowContextmenu !== void 0) {
24146
+ data.onContextmenu = (evt) => {
24147
+ emit("rowContextmenu", evt, scope.row, scope.pageIndex);
24148
+ };
24149
+ }
24081
24150
  }
24082
24151
  return h("div", {
24083
24152
  class: "q-table__grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3" + (scope.selected === true ? " q-table__grid-item--selected" : "")
@@ -24122,7 +24191,7 @@
24122
24191
  });
24123
24192
  return () => {
24124
24193
  const child = [getTopDiv()];
24125
- const data = { ref: rootRef, class: containerClass.value };
24194
+ const data = { ref: rootRef, class: rootContainerClass.value };
24126
24195
  if (props4.grid === true) {
24127
24196
  child.push(getGridHeader());
24128
24197
  } else {
@@ -24156,7 +24225,10 @@
24156
24225
  const classes = computed(
24157
24226
  () => "q-tr" + (props4.props === void 0 || props4.props.header === true ? "" : " " + props4.props.__trClass) + (props4.noHover === true ? " q-tr--no-hover" : "")
24158
24227
  );
24159
- return () => h("tr", { class: classes.value }, hSlot(slots.default));
24228
+ return () => h("tr", {
24229
+ style: props4.props?.__trStyle,
24230
+ class: classes.value
24231
+ }, hSlot(slots.default));
24160
24232
  }
24161
24233
  });
24162
24234
 
@@ -24360,7 +24432,7 @@
24360
24432
  }
24361
24433
  const pos = [];
24362
24434
  for (let val = start, index = start; val <= end; val += step, index++) {
24363
- const actualVal = val + offset2, disable = values !== void 0 && values.includes(actualVal) === false, label = view.value === "hour" && val === 0 ? computedFormat24h.value === true ? "00" : "12" : val;
24435
+ const actualVal = val + offset2, disable = values?.includes(actualVal) === false, label = view.value === "hour" && val === 0 ? computedFormat24h.value === true ? "00" : "12" : val;
24364
24436
  pos.push({ val: actualVal, index, disable, label });
24365
24437
  }
24366
24438
  return pos;
@@ -25214,7 +25286,7 @@
25214
25286
  node[props4.childrenKey] = Array.isArray(children) === true ? children : [];
25215
25287
  nextTick(() => {
25216
25288
  const localMeta = meta.value[key];
25217
- if (localMeta && localMeta.isParent === true) {
25289
+ if (localMeta?.isParent === true) {
25218
25290
  localSetExpanded(key, true);
25219
25291
  }
25220
25292
  });
@@ -25439,8 +25511,7 @@
25439
25511
  ]);
25440
25512
  }
25441
25513
  function blur(key) {
25442
- const blurTarget = blurTargets[key];
25443
- blurTarget && blurTarget.focus();
25514
+ blurTargets[key]?.focus();
25444
25515
  }
25445
25516
  function onClick(node, meta2, e, keyboard) {
25446
25517
  keyboard !== true && meta2.selectable !== false && blur(meta2.key);
@@ -26418,7 +26489,7 @@
26418
26489
  elFrom.qMorphCancel = () => {
26419
26490
  cancelStatus = true;
26420
26491
  elFromClone.remove();
26421
- elFromTween !== void 0 && elFromTween.remove();
26492
+ elFromTween?.remove();
26422
26493
  options.hideFromClone === true && elFromClone.classList.remove("q-morph--internal");
26423
26494
  elFrom.qMorphCancel = void 0;
26424
26495
  };
@@ -26443,7 +26514,7 @@
26443
26514
  elTo.qMorphCancel = () => {
26444
26515
  cancelStatus = true;
26445
26516
  elFromClone.remove();
26446
- elFromTween !== void 0 && elFromTween.remove();
26517
+ elFromTween?.remove();
26447
26518
  options.hideFromClone === true && elFromClone.classList.remove("q-morph--internal");
26448
26519
  options.keepToClone !== true && elTo.classList.remove("q-morph--internal");
26449
26520
  elFrom.qMorphCancel = void 0;
@@ -26599,10 +26670,12 @@
26599
26670
  elTo.style.cssText = elToStyleSaved;
26600
26671
  elTo.className = elToClassSaved;
26601
26672
  }
26602
- elToClone.parentNode === elToParent && elToParent.insertBefore(elTo, elToClone);
26673
+ if (elToClone.parentNode === elToParent) {
26674
+ elToParent.insertBefore(elTo, elToClone);
26675
+ }
26603
26676
  elFromClone.remove();
26604
26677
  elToClone.remove();
26605
- elFromTween !== void 0 && elFromTween.remove();
26678
+ elFromTween?.remove();
26606
26679
  cancel = () => false;
26607
26680
  elFrom.qMorphCancel = void 0;
26608
26681
  elTo.qMorphCancel = void 0;
@@ -26734,9 +26807,9 @@
26734
26807
  delay: options.delay
26735
26808
  });
26736
26809
  const cleanup = (abort) => {
26737
- animationFromClone !== void 0 && animationFromClone.cancel();
26738
- animationFromTween !== void 0 && animationFromTween.cancel();
26739
- animationToClone !== void 0 && animationToClone.cancel();
26810
+ animationFromClone?.cancel();
26811
+ animationFromTween?.cancel();
26812
+ animationToClone?.cancel();
26740
26813
  animationTo.cancel();
26741
26814
  animationTo.removeEventListener("finish", cleanup);
26742
26815
  animationTo.removeEventListener("cancel", cleanup);
@@ -26767,9 +26840,9 @@
26767
26840
  return true;
26768
26841
  }
26769
26842
  endElementTo = endElementTo !== true;
26770
- animationFromClone !== void 0 && animationFromClone.reverse();
26771
- animationFromTween !== void 0 && animationFromTween.reverse();
26772
- animationToClone !== void 0 && animationToClone.reverse();
26843
+ animationFromClone?.reverse();
26844
+ animationFromTween?.reverse();
26845
+ animationToClone?.reverse();
26773
26846
  animationTo.reverse();
26774
26847
  return true;
26775
26848
  };
@@ -27021,7 +27094,7 @@
27021
27094
  },
27022
27095
  ...to.opts,
27023
27096
  onEnd(dir, aborted) {
27024
- to.opts.onEnd !== void 0 && to.opts.onEnd(dir, aborted);
27097
+ to.opts.onEnd?.(dir, aborted);
27025
27098
  if (aborted === true) return;
27026
27099
  from.animating = false;
27027
27100
  to.animating = false;
@@ -27138,7 +27211,7 @@
27138
27211
  if (index !== -1) {
27139
27212
  group.queue = group.queue.filter((item) => item !== ctx);
27140
27213
  if (group.queue.length === 0) {
27141
- group.cancel !== void 0 && group.cancel();
27214
+ group.cancel?.();
27142
27215
  delete morphGroups[ctx.group];
27143
27216
  }
27144
27217
  }
@@ -27162,7 +27235,7 @@
27162
27235
  };
27163
27236
  function update3(el, ctx, value2) {
27164
27237
  ctx.handler = value2;
27165
- ctx.observer !== void 0 && ctx.observer.disconnect();
27238
+ ctx.observer?.disconnect();
27166
27239
  ctx.observer = new MutationObserver((list) => {
27167
27240
  if (typeof ctx.handler === "function") {
27168
27241
  const res = ctx.handler(list);
@@ -27176,7 +27249,7 @@
27176
27249
  function destroy2(el) {
27177
27250
  const ctx = el.__qmutation;
27178
27251
  if (ctx !== void 0) {
27179
- ctx.observer !== void 0 && ctx.observer.disconnect();
27252
+ ctx.observer?.disconnect();
27180
27253
  delete el.__qmutation;
27181
27254
  }
27182
27255
  }
@@ -27365,7 +27438,7 @@
27365
27438
  },
27366
27439
  end(evt) {
27367
27440
  cleanEvt(ctx, "temp");
27368
- ctx.styleCleanup !== void 0 && ctx.styleCleanup(ctx.triggered);
27441
+ ctx.styleCleanup?.(ctx.triggered);
27369
27442
  if (ctx.triggered === true) {
27370
27443
  evt !== void 0 && stopAndPrevent(evt);
27371
27444
  } else if (ctx.timer !== void 0) {
@@ -27407,7 +27480,7 @@
27407
27480
  cleanEvt(ctx, "main");
27408
27481
  cleanEvt(ctx, "temp");
27409
27482
  ctx.timer !== void 0 && clearTimeout(ctx.timer);
27410
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
27483
+ ctx.styleCleanup?.();
27411
27484
  delete el.__qtouchhold;
27412
27485
  }
27413
27486
  }
@@ -27549,8 +27622,8 @@
27549
27622
  },
27550
27623
  end(evt) {
27551
27624
  if (ctx.event === void 0) return;
27552
- ctx.styleCleanup !== void 0 && ctx.styleCleanup(true);
27553
- evt !== void 0 && ctx.event.repeatCount > 0 && stopAndPrevent(evt);
27625
+ ctx.styleCleanup?.(true);
27626
+ if (evt !== void 0 && ctx.event.repeatCount > 0) stopAndPrevent(evt);
27554
27627
  cleanEvt(ctx, "temp");
27555
27628
  if (ctx.timer !== void 0) {
27556
27629
  clearTimeout(ctx.timer);
@@ -27590,7 +27663,7 @@
27590
27663
  ctx.timer !== void 0 && clearTimeout(ctx.timer);
27591
27664
  cleanEvt(ctx, "main");
27592
27665
  cleanEvt(ctx, "temp");
27593
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
27666
+ ctx.styleCleanup?.();
27594
27667
  delete el.__qtouchrepeat;
27595
27668
  }
27596
27669
  }
@@ -27954,12 +28027,12 @@
27954
28027
  const dialogRef = ref(null);
27955
28028
  const el = createGlobalNode(false, "dialog");
27956
28029
  const applyState = (cmd) => {
27957
- if (dialogRef.value !== null && dialogRef.value[cmd] !== void 0) {
28030
+ if (dialogRef.value?.[cmd] !== void 0) {
27958
28031
  dialogRef.value[cmd]();
27959
28032
  return;
27960
28033
  }
27961
28034
  const target2 = vm2.$.subTree;
27962
- if (target2 && target2.component) {
28035
+ if (target2?.component) {
27963
28036
  if (target2.component.proxy && target2.component.proxy[cmd]) {
27964
28037
  target2.component.proxy[cmd]();
27965
28038
  return;
@@ -28444,7 +28517,7 @@
28444
28517
  };
28445
28518
  var defaults = { ...originalDefaults };
28446
28519
  function registerProps(opts) {
28447
- if (opts && opts.group !== void 0 && activeGroups[opts.group] !== void 0) {
28520
+ if (opts?.group !== void 0 && activeGroups[opts.group] !== void 0) {
28448
28521
  return Object.assign(activeGroups[opts.group], opts);
28449
28522
  }
28450
28523
  const newProps = isObject(opts) === true && opts.ignoreDefaults === true ? { ...originalDefaults, ...opts } : { ...defaults, ...opts };
@@ -28887,7 +28960,7 @@
28887
28960
  const actions = (Array.isArray(config.actions) === true ? config.actions : []).concat(
28888
28961
  config.ignoreDefaults !== true && Array.isArray(defaults2.actions) === true ? defaults2.actions : []
28889
28962
  ).concat(
28890
- notifTypes[config.type] !== void 0 && Array.isArray(notifTypes[config.type].actions) === true ? notifTypes[config.type].actions : []
28963
+ Array.isArray(notifTypes[config.type]?.actions) === true ? notifTypes[config.type].actions : []
28891
28964
  );
28892
28965
  const { closeBtn } = notif;
28893
28966
  closeBtn && actions.push({
@@ -29539,9 +29612,9 @@
29539
29612
  function openWindow(url, reject, windowFeatures) {
29540
29613
  let open2 = window.open;
29541
29614
  if (Platform_default.is.cordova === true) {
29542
- if (cordova !== void 0 && cordova.InAppBrowser !== void 0 && cordova.InAppBrowser.open !== void 0) {
29615
+ if (cordova?.InAppBrowser?.open !== void 0) {
29543
29616
  open2 = cordova.InAppBrowser.open;
29544
- } else if (navigator !== void 0 && navigator.app !== void 0) {
29617
+ } else if (navigator?.app !== void 0) {
29545
29618
  return navigator.app.loadUrl(url, {
29546
29619
  openExternal: true
29547
29620
  });
@@ -29552,7 +29625,7 @@
29552
29625
  Platform_default.is.desktop && win.focus();
29553
29626
  return win;
29554
29627
  } else {
29555
- reject && reject();
29628
+ reject?.();
29556
29629
  }
29557
29630
  }
29558
29631
  var open_url_default = (url, reject, windowFeatures) => {
@@ -29749,7 +29822,7 @@
29749
29822
  console.error("[ Quasar ] Vue is required to run. Please add a script tag for it before loading Quasar.");
29750
29823
  }
29751
29824
  window.Quasar = {
29752
- version: "2.17.6",
29825
+ version: "2.18.0",
29753
29826
  install(app2, opts) {
29754
29827
  install_quasar_default(app2, {
29755
29828
  components: components_exports,