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
  */
@@ -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.6",
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.6" };
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);
@@ -10572,7 +10589,7 @@ var QDate_default = createComponent({
10572
10589
  });
10573
10590
  const attributes = computed43(() => props4.disable === true ? { "aria-disabled": "true" } : {});
10574
10591
  watch13(() => props4.modelValue, (v) => {
10575
- if (lastEmitValue === v) {
10592
+ if (lastEmitValue === JSON.stringify(v)) {
10576
10593
  lastEmitValue = 0;
10577
10594
  } else {
10578
10595
  const model = getViewModel(innerMask.value, innerLocale.value);
@@ -10595,6 +10612,9 @@ var QDate_default = createComponent({
10595
10612
  updateValue2(innerMask.value, val, "locale");
10596
10613
  innerLocale.value = val;
10597
10614
  });
10615
+ function setLastValue(v) {
10616
+ lastEmitValue = JSON.stringify(v);
10617
+ }
10598
10618
  function setToday() {
10599
10619
  const { year: year2, month, day } = today.value;
10600
10620
  const date = {
@@ -10724,7 +10744,7 @@ var QDate_default = createComponent({
10724
10744
  }
10725
10745
  function toggleDate(date, monthHash) {
10726
10746
  const month = daysMap.value[monthHash];
10727
- const fn = month !== void 0 && month.includes(date.day) === true ? removeFromModel : addToModel;
10747
+ const fn = month?.includes(date.day) === true ? removeFromModel : addToModel;
10728
10748
  fn(date);
10729
10749
  }
10730
10750
  function getShortDate(date) {
@@ -10766,8 +10786,8 @@ var QDate_default = createComponent({
10766
10786
  }
10767
10787
  function emitValue(val, action, date) {
10768
10788
  const value2 = val !== null && val.length === 1 && props4.multiple === false ? val[0] : val;
10769
- lastEmitValue = value2;
10770
10789
  const { reason, details } = getEmitParams(action, date);
10790
+ setLastValue(value2);
10771
10791
  emit("update:modelValue", value2, reason, details);
10772
10792
  }
10773
10793
  function emitImmediately(reason) {
@@ -10778,8 +10798,8 @@ var QDate_default = createComponent({
10778
10798
  const maxDay = props4.calendar !== "persian" ? new Date(date.year, date.month, 0).getDate() : jalaaliMonthLength(date.year, date.month);
10779
10799
  date.day = Math.min(Math.max(1, date.day), maxDay);
10780
10800
  const value2 = encodeEntry(date);
10781
- lastEmitValue = value2;
10782
10801
  const { details } = getEmitParams("", date);
10802
+ setLastValue(value2);
10783
10803
  emit("update:modelValue", value2, reason, details);
10784
10804
  });
10785
10805
  }
@@ -10840,7 +10860,9 @@ var QDate_default = createComponent({
10840
10860
  const model = daysModel.value.concat(rangeModel.value).map((entry) => encodeEntry(entry, mask2, locale2)).filter((entry) => {
10841
10861
  return entry.from !== void 0 ? entry.from.dateHash !== null && entry.to.dateHash !== null : entry.dateHash !== null;
10842
10862
  });
10843
- emit("update:modelValue", (props4.multiple === true ? model : model[0]) || null, reason);
10863
+ const value2 = (props4.multiple === true ? model : model[0]) || null;
10864
+ setLastValue(value2);
10865
+ emit("update:modelValue", value2, reason);
10844
10866
  }
10845
10867
  function getHeader() {
10846
10868
  if (props4.minimal === true) return;
@@ -11494,7 +11516,7 @@ var QDialog_default = createComponent({
11494
11516
  showPortal();
11495
11517
  animating.value = true;
11496
11518
  if (props4.noFocus !== true) {
11497
- document.activeElement !== null && document.activeElement.blur();
11519
+ document.activeElement?.blur();
11498
11520
  registerTick(focus);
11499
11521
  } else {
11500
11522
  removeTick();
@@ -11527,7 +11549,7 @@ var QDialog_default = createComponent({
11527
11549
  animating.value = true;
11528
11550
  hidePortal();
11529
11551
  if (refocusTarget !== null) {
11530
- ((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();
11531
11553
  refocusTarget = null;
11532
11554
  }
11533
11555
  registerTimeout(() => {
@@ -11757,7 +11779,7 @@ var QDrawer_default = createComponent({
11757
11779
  applyPosition(0);
11758
11780
  if (belowBreakpoint.value === true) {
11759
11781
  const otherInstance = $layout.instances[otherSide.value];
11760
- if (otherInstance !== void 0 && otherInstance.belowBreakpoint === true) {
11782
+ if (otherInstance?.belowBreakpoint === true) {
11761
11783
  otherInstance.hide(false);
11762
11784
  }
11763
11785
  applyBackdrop(1);
@@ -11997,9 +12019,7 @@ var QDrawer_default = createComponent({
11997
12019
  timerMini = setTimeout(() => {
11998
12020
  timerMini = null;
11999
12021
  flagMiniAnimate.value = false;
12000
- if (vm2 && vm2.proxy && vm2.proxy.$el) {
12001
- vm2.proxy.$el.classList.remove("q-drawer--mini-animate");
12002
- }
12022
+ vm2?.proxy?.$el?.classList.remove("q-drawer--mini-animate");
12003
12023
  }, 150);
12004
12024
  }
12005
12025
  function onOpenPan(evt) {
@@ -12097,7 +12117,7 @@ var QDrawer_default = createComponent({
12097
12117
  });
12098
12118
  });
12099
12119
  onBeforeUnmount16(() => {
12100
- layoutTotalWidthWatcher !== void 0 && layoutTotalWidthWatcher();
12120
+ layoutTotalWidthWatcher?.();
12101
12121
  if (timerMini !== null) {
12102
12122
  clearTimeout(timerMini);
12103
12123
  timerMini = null;
@@ -12244,7 +12264,7 @@ var Caret = class {
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;
@@ -12711,7 +12731,7 @@ var QItem_default = createComponent({
12711
12731
  });
12712
12732
  function onClick(e) {
12713
12733
  if (isClickable.value === true) {
12714
- if (blurTargetRef.value !== null) {
12734
+ if (blurTargetRef.value !== null && e.qAvoidFocus !== true) {
12715
12735
  if (e.qKeyEvent !== true && document.activeElement === rootRef.value) {
12716
12736
  blurTargetRef.value.focus();
12717
12737
  } else if (document.activeElement === blurTargetRef.value) {
@@ -12814,7 +12834,7 @@ function getBtn(eVm, btn, clickHandler, active = false) {
12814
12834
  disable: btn.disable ? typeof btn.disable === "function" ? btn.disable(eVm) : true : false,
12815
12835
  size: "sm",
12816
12836
  onClick(e) {
12817
- clickHandler && clickHandler();
12837
+ clickHandler?.();
12818
12838
  run(e, btn, eVm);
12819
12839
  }
12820
12840
  }, () => child);
@@ -12858,7 +12878,7 @@ function getDropdown(eVm, btn) {
12858
12878
  dense: true,
12859
12879
  onClick(e) {
12860
12880
  closeDropdown();
12861
- eVm.contentRef.value !== null && eVm.contentRef.value.focus();
12881
+ e?.qAvoidFocus !== true && eVm.contentRef.value?.focus();
12862
12882
  eVm.caret.restore();
12863
12883
  run(e, btn2, eVm);
12864
12884
  }
@@ -13432,7 +13452,7 @@ var QEditor_default = createComponent({
13432
13452
  }
13433
13453
  function focus() {
13434
13454
  addFocusFn(() => {
13435
- contentRef.value !== null && contentRef.value.focus({ preventScroll: true });
13455
+ contentRef.value?.focus({ preventScroll: true });
13436
13456
  });
13437
13457
  }
13438
13458
  function getContentEl() {
@@ -13553,7 +13573,7 @@ var QSlideTransition_default = createComponent({
13553
13573
  let animating = false, doneFn, element;
13554
13574
  let timer2 = null, timerFallback = null, animListener, lastEvent;
13555
13575
  function cleanup() {
13556
- doneFn && doneFn();
13576
+ doneFn?.();
13557
13577
  doneFn = null;
13558
13578
  animating = false;
13559
13579
  if (timer2 !== null) {
@@ -13564,7 +13584,7 @@ var QSlideTransition_default = createComponent({
13564
13584
  clearTimeout(timerFallback);
13565
13585
  timerFallback = null;
13566
13586
  }
13567
- element !== void 0 && element.removeEventListener("transitionend", animListener);
13587
+ element?.removeEventListener("transitionend", animListener);
13568
13588
  animListener = null;
13569
13589
  }
13570
13590
  function begin(el, height2, done) {
@@ -13790,7 +13810,7 @@ var QExpansionItem_default = createComponent({
13790
13810
  };
13791
13811
  });
13792
13812
  watch18(() => props4.group, (name2) => {
13793
- exitGroup !== void 0 && exitGroup();
13813
+ exitGroup?.();
13794
13814
  name2 !== void 0 && enterGroup();
13795
13815
  });
13796
13816
  function onHeaderClick(e) {
@@ -13801,7 +13821,9 @@ var QExpansionItem_default = createComponent({
13801
13821
  e.keyCode === 13 && toggleIcon(e, true);
13802
13822
  }
13803
13823
  function toggleIcon(e, keyboard) {
13804
- keyboard !== true && blurTargetRef.value !== null && blurTargetRef.value.focus();
13824
+ if (keyboard !== true && e.qAvoidFocus !== true) {
13825
+ blurTargetRef.value?.focus();
13826
+ }
13805
13827
  toggle(e);
13806
13828
  stopAndPrevent(e);
13807
13829
  }
@@ -13958,7 +13980,7 @@ var QExpansionItem_default = createComponent({
13958
13980
  }
13959
13981
  props4.group !== void 0 && enterGroup();
13960
13982
  onBeforeUnmount20(() => {
13961
- exitGroup !== void 0 && exitGroup();
13983
+ exitGroup?.();
13962
13984
  });
13963
13985
  return () => h49("div", { class: classes.value }, [
13964
13986
  h49("div", { class: "q-expansion-item__container relative-position" }, getContent())
@@ -14123,8 +14145,8 @@ var QFab_default = createComponent({
14123
14145
  showing,
14124
14146
  onChildClick(evt) {
14125
14147
  hide(evt);
14126
- if (triggerRef.value !== null) {
14127
- triggerRef.value.$el.focus();
14148
+ if (evt?.qAvoidFocus !== true) {
14149
+ triggerRef.value?.$el.focus();
14128
14150
  }
14129
14151
  }
14130
14152
  });
@@ -14386,7 +14408,7 @@ function use_validate_default(focused, innerLoading) {
14386
14408
  }
14387
14409
  const debouncedValidate = debounce_default(validate, 0);
14388
14410
  onBeforeUnmount22(() => {
14389
- unwatchRules !== void 0 && unwatchRules();
14411
+ unwatchRules?.();
14390
14412
  debouncedValidate.cancel();
14391
14413
  });
14392
14414
  Object.assign(proxy, { resetValidation, validate });
@@ -14576,11 +14598,11 @@ function use_field_default(state) {
14576
14598
  });
14577
14599
  function focusHandler() {
14578
14600
  const el = document.activeElement;
14579
- let target2 = state.targetRef !== void 0 && state.targetRef.value;
14601
+ let target2 = state.targetRef?.value;
14580
14602
  if (target2 && (el === null || el.id !== state.targetUid.value)) {
14581
14603
  target2.hasAttribute("tabindex") === true || (target2 = target2.querySelector("[tabindex]"));
14582
- if (target2 && target2 !== el) {
14583
- target2.focus({ preventScroll: true });
14604
+ if (target2 !== el) {
14605
+ target2?.focus({ preventScroll: true });
14584
14606
  }
14585
14607
  }
14586
14608
  }
@@ -14613,13 +14635,13 @@ function use_field_default(state) {
14613
14635
  state.focused.value = false;
14614
14636
  emit("blur", e);
14615
14637
  }
14616
- then !== void 0 && then();
14638
+ then?.();
14617
14639
  });
14618
14640
  }
14619
14641
  function clearValue(e) {
14620
14642
  stopAndPrevent(e);
14621
14643
  if ($q.platform.is.mobile !== true) {
14622
- const el = state.targetRef !== void 0 && state.targetRef.value || state.rootRef.value;
14644
+ const el = state.targetRef?.value || state.rootRef.value;
14623
14645
  el.focus();
14624
14646
  } else if (state.rootRef.value.contains(document.activeElement) === true) {
14625
14647
  document.activeElement.blur();
@@ -14864,7 +14886,9 @@ function filterFiles(files, rejectedFiles, failedPropValidation, filterFn) {
14864
14886
  return acceptedFiles;
14865
14887
  }
14866
14888
  function stopAndPreventDrag(e) {
14867
- e && e.dataTransfer && (e.dataTransfer.dropEffect = "copy");
14889
+ if (e?.dataTransfer) {
14890
+ e.dataTransfer.dropEffect = "copy";
14891
+ }
14868
14892
  stopAndPrevent(e);
14869
14893
  }
14870
14894
  var useFileProps = {
@@ -14901,11 +14925,11 @@ function use_file_default({
14901
14925
  if (e !== Object(e)) {
14902
14926
  e = { target: null };
14903
14927
  }
14904
- if (e.target !== null && e.target.matches('input[type="file"]') === true) {
14928
+ if (e.target?.matches('input[type="file"]') === true) {
14905
14929
  e.clientX === 0 && e.clientY === 0 && stop(e);
14906
14930
  } else {
14907
14931
  const input = getFileInput();
14908
- input && input !== e.target && input.click(e);
14932
+ if (input !== e.target) input?.click(e);
14909
14933
  }
14910
14934
  }
14911
14935
  }
@@ -15468,7 +15492,7 @@ var QForm_default = createComponent({
15468
15492
  if (index === validateIndex && val === true) {
15469
15493
  if (props4.onSubmit !== void 0) {
15470
15494
  emit("submit", evt);
15471
- } 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") {
15472
15496
  evt.target.submit();
15473
15497
  }
15474
15498
  }
@@ -15488,7 +15512,7 @@ var QForm_default = createComponent({
15488
15512
  addFocusFn(() => {
15489
15513
  if (rootRef.value === null) return;
15490
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);
15491
- target2 !== null && target2 !== void 0 && target2.focus({ preventScroll: true });
15515
+ target2?.focus({ preventScroll: true });
15492
15516
  });
15493
15517
  }
15494
15518
  provide3(formKey, {
@@ -15556,12 +15580,14 @@ var QFormChildMixin_default = {
15556
15580
  }
15557
15581
  },
15558
15582
  mounted() {
15559
- const $form = this.$.provides[formKey];
15560
- $form !== void 0 && this.disable !== true && $form.bindComponent(this);
15583
+ if (this.disable !== true) {
15584
+ this.$.provides[formKey]?.bindComponent(this);
15585
+ }
15561
15586
  },
15562
15587
  beforeUnmount() {
15563
- const $form = this.$.provides[formKey];
15564
- $form !== void 0 && this.disable !== true && $form.unbindComponent(this);
15588
+ if (this.disable !== true) {
15589
+ this.$.provides[formKey]?.unbindComponent(this);
15590
+ }
15565
15591
  }
15566
15592
  };
15567
15593
 
@@ -16039,9 +16065,7 @@ var QInfiniteScroll_default = createComponent({
16039
16065
  isWorking.value = false;
16040
16066
  isFetching.value = false;
16041
16067
  localScrollTarget.removeEventListener("scroll", poll, passive2);
16042
- if (poll !== void 0 && poll.cancel !== void 0) {
16043
- poll.cancel();
16044
- }
16068
+ poll?.cancel?.();
16045
16069
  }
16046
16070
  }
16047
16071
  function updateScrollTarget() {
@@ -16126,7 +16150,7 @@ var QInfiniteScroll_default = createComponent({
16126
16150
  const vm2 = getCurrentInstance47();
16127
16151
  Object.assign(vm2.proxy, {
16128
16152
  poll: () => {
16129
- poll !== void 0 && poll();
16153
+ poll?.();
16130
16154
  },
16131
16155
  trigger: trigger3,
16132
16156
  stop: stop2,
@@ -16737,7 +16761,7 @@ var QInput_default = createComponent({
16737
16761
  });
16738
16762
  }
16739
16763
  function select() {
16740
- inputRef.value !== null && inputRef.value.select();
16764
+ inputRef.value?.select();
16741
16765
  }
16742
16766
  function onPaste(e) {
16743
16767
  if (hasMask.value === true && props4.reverseFillMask !== true) {
@@ -16830,7 +16854,7 @@ var QInput_default = createComponent({
16830
16854
  clearTimeout(emitTimer);
16831
16855
  emitTimer = null;
16832
16856
  }
16833
- emitValueFn !== void 0 && emitValueFn();
16857
+ emitValueFn?.();
16834
16858
  emit("change", e.target.value);
16835
16859
  }
16836
16860
  function onFinishEditing(e) {
@@ -16839,7 +16863,7 @@ var QInput_default = createComponent({
16839
16863
  clearTimeout(emitTimer);
16840
16864
  emitTimer = null;
16841
16865
  }
16842
- emitValueFn !== void 0 && emitValueFn();
16866
+ emitValueFn?.();
16843
16867
  typedNumber = false;
16844
16868
  stopValueWatcher = false;
16845
16869
  delete temp.value;
@@ -16931,7 +16955,7 @@ function update2(el, ctx, value2) {
16931
16955
  }
16932
16956
  if (changed2 === true) {
16933
16957
  ctx.cfg = cfg;
16934
- ctx.observer !== void 0 && ctx.observer.unobserve(el);
16958
+ ctx.observer?.unobserve(el);
16935
16959
  ctx.observer = new IntersectionObserver(([entry]) => {
16936
16960
  if (typeof ctx.handler === "function") {
16937
16961
  if (entry.rootBounds === null && document.body.contains(el) === true) {
@@ -16951,7 +16975,7 @@ function update2(el, ctx, value2) {
16951
16975
  function destroy(el) {
16952
16976
  const ctx = el.__qvisible;
16953
16977
  if (ctx !== void 0) {
16954
- ctx.observer !== void 0 && ctx.observer.unobserve(el);
16978
+ ctx.observer?.unobserve(el);
16955
16979
  delete el.__qvisible;
16956
16980
  }
16957
16981
  }
@@ -17310,7 +17334,7 @@ var QScrollObserver_default = createComponent({
17310
17334
  configureScrollTarget();
17311
17335
  });
17312
17336
  function emitEvent() {
17313
- clearTimer !== null && clearTimer();
17337
+ clearTimer?.();
17314
17338
  const top = Math.max(0, getVerticalScrollPosition(localScrollTarget));
17315
17339
  const left = getHorizontalScrollPosition(localScrollTarget);
17316
17340
  const delta = {
@@ -17357,7 +17381,7 @@ var QScrollObserver_default = createComponent({
17357
17381
  configureScrollTarget();
17358
17382
  });
17359
17383
  onBeforeUnmount28(() => {
17360
- clearTimer !== null && clearTimer();
17384
+ clearTimer?.();
17361
17385
  unconfigureScrollTarget();
17362
17386
  });
17363
17387
  Object.assign(proxy, {
@@ -18399,14 +18423,16 @@ var QPagination_default = createComponent({
18399
18423
  getBtn2({
18400
18424
  key: "bls",
18401
18425
  disable: props4.disable || props4.modelValue <= minProp.value,
18402
- icon: icons.value[0]
18426
+ icon: icons.value[0],
18427
+ "aria-label": $q.lang.pagination.first
18403
18428
  }, minProp.value)
18404
18429
  );
18405
18430
  contentEnd.unshift(
18406
18431
  getBtn2({
18407
18432
  key: "ble",
18408
18433
  disable: props4.disable || props4.modelValue >= maxProp.value,
18409
- icon: icons.value[3]
18434
+ icon: icons.value[3],
18435
+ "aria-label": $q.lang.pagination.last
18410
18436
  }, maxProp.value)
18411
18437
  );
18412
18438
  }
@@ -18415,14 +18441,16 @@ var QPagination_default = createComponent({
18415
18441
  getBtn2({
18416
18442
  key: "bdp",
18417
18443
  disable: props4.disable || props4.modelValue <= minProp.value,
18418
- icon: icons.value[1]
18444
+ icon: icons.value[1],
18445
+ "aria-label": $q.lang.pagination.prev
18419
18446
  }, props4.modelValue - 1)
18420
18447
  );
18421
18448
  contentEnd.unshift(
18422
18449
  getBtn2({
18423
18450
  key: "bdn",
18424
18451
  disable: props4.disable || props4.modelValue >= maxProp.value,
18425
- icon: icons.value[2]
18452
+ icon: icons.value[2],
18453
+ "aria-label": $q.lang.pagination.next
18426
18454
  }, props4.modelValue + 1)
18427
18455
  );
18428
18456
  }
@@ -18641,7 +18669,7 @@ var QParallax_default = createComponent({
18641
18669
  });
18642
18670
  onBeforeUnmount30(() => {
18643
18671
  stop2();
18644
- observer !== void 0 && observer.disconnect();
18672
+ observer?.disconnect();
18645
18673
  mediaEl.onload = mediaEl.onloadstart = mediaEl.loadedmetadata = null;
18646
18674
  });
18647
18675
  return () => {
@@ -18832,10 +18860,10 @@ var QPopupEdit_default = createComponent({
18832
18860
  set: set2,
18833
18861
  cancel,
18834
18862
  show(e) {
18835
- menuRef.value !== null && menuRef.value.show(e);
18863
+ menuRef.value?.show(e);
18836
18864
  },
18837
18865
  hide(e) {
18838
- menuRef.value !== null && menuRef.value.hide(e);
18866
+ menuRef.value?.hide(e);
18839
18867
  },
18840
18868
  updatePosition
18841
18869
  });
@@ -19134,7 +19162,7 @@ var QPullToRefresh_default = createComponent({
19134
19162
  timer2 = setTimeout(() => {
19135
19163
  timer2 = null;
19136
19164
  animating.value = false;
19137
- done && done();
19165
+ done?.();
19138
19166
  }, 300);
19139
19167
  }
19140
19168
  function updateScrollTarget() {
@@ -20107,7 +20135,7 @@ var setOverflowAnchor = __QUASAR_SSR__ || window.getComputedStyle(document.body)
20107
20135
  delete el2.dataset.qVsAnchor;
20108
20136
  });
20109
20137
  const el = children[index];
20110
- if (el && el.dataset) {
20138
+ if (el?.dataset) {
20111
20139
  el.dataset.qVsAnchor = "";
20112
20140
  }
20113
20141
  });
@@ -20379,7 +20407,7 @@ function useVirtualScroll({
20379
20407
  if (rangeChanged === true && contentEl !== null && contentEl !== activeElement && contentEl.contains(activeElement) === true) {
20380
20408
  contentEl.addEventListener("focusout", onBlurRefocusFn);
20381
20409
  setTimeout(() => {
20382
- contentEl !== null && contentEl.removeEventListener("focusout", onBlurRefocusFn);
20410
+ contentEl?.removeEventListener("focusout", onBlurRefocusFn);
20383
20411
  });
20384
20412
  }
20385
20413
  setOverflowAnchor(contentEl, toIndex - from);
@@ -20443,7 +20471,7 @@ function useVirtualScroll({
20443
20471
  }
20444
20472
  }
20445
20473
  function onBlurRefocusFn() {
20446
- contentRef.value !== null && contentRef.value !== void 0 && contentRef.value.focus();
20474
+ contentRef.value?.focus();
20447
20475
  }
20448
20476
  function localResetVirtualScroll(toIndex, fullReset) {
20449
20477
  const defaultSize = 1 * virtualScrollItemSizeComputed.value;
@@ -20781,7 +20809,7 @@ var QSelect_default = createComponent({
20781
20809
  () => innerValue.value.map((opt) => getOptionLabel.value(opt)).join(", ")
20782
20810
  );
20783
20811
  const ariaCurrentValue = computed89(() => props4.displayValue !== void 0 ? props4.displayValue : selectedString.value);
20784
- 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);
20785
20813
  const valueAsHtml = computed89(() => props4.displayValueHtml === true || props4.displayValue === void 0 && (props4.optionsHtml === true || innerValue.value.some(needsHtmlFn.value)));
20786
20814
  const tabindex = computed89(() => state.focused.value === true ? props4.tabindex : -1);
20787
20815
  const comboboxAttrs = computed89(() => {
@@ -20955,13 +20983,15 @@ var QSelect_default = createComponent({
20955
20983
  );
20956
20984
  hidePopup();
20957
20985
  }
20958
- targetRef.value !== null && targetRef.value.focus();
20986
+ targetRef.value?.focus();
20959
20987
  if (innerValue.value.length === 0 || isDeepEqual(getOptionValue.value(innerValue.value[0]), optValue) !== true) {
20960
20988
  emit("update:modelValue", props4.emitValue === true ? optValue : opt);
20961
20989
  }
20962
20990
  return;
20963
20991
  }
20964
- (hasDialog !== true || dialogFieldFocused.value === true) && state.focus();
20992
+ if (hasDialog !== true || dialogFieldFocused.value === true) {
20993
+ state.focus();
20994
+ }
20965
20995
  selectInputText();
20966
20996
  if (innerValue.value.length === 0) {
20967
20997
  const val = props4.emitValue === true ? optValue : opt;
@@ -21166,7 +21196,7 @@ var QSelect_default = createComponent({
21166
21196
  const fn = mode === "toggle" ? toggleOption : add;
21167
21197
  fn(val, mode === "add-unique");
21168
21198
  if (props4.multiple !== true) {
21169
- targetRef.value !== null && targetRef.value.focus();
21199
+ targetRef.value?.focus();
21170
21200
  hidePopup();
21171
21201
  }
21172
21202
  };
@@ -21411,7 +21441,7 @@ var QSelect_default = createComponent({
21411
21441
  }
21412
21442
  function onDialogFieldFocus(e) {
21413
21443
  stop(e);
21414
- targetRef.value !== null && targetRef.value.focus();
21444
+ targetRef.value?.focus();
21415
21445
  dialogFieldFocused.value = true;
21416
21446
  window.scrollTo(window.pageXOffset || window.scrollX || document.body.scrollLeft || 0, 0);
21417
21447
  }
@@ -21640,7 +21670,7 @@ var QSelect_default = createComponent({
21640
21670
  prevent(e);
21641
21671
  if (hasDialog !== true && menu.value === true) {
21642
21672
  closeMenu();
21643
- targetRef.value !== null && targetRef.value.focus();
21673
+ targetRef.value?.focus();
21644
21674
  return;
21645
21675
  }
21646
21676
  showPopup(e);
@@ -22619,7 +22649,7 @@ var StepHeader_default = createComponent({
22619
22649
  });
22620
22650
  const ripple = computed93(() => props4.stepper.headerNav !== true ? false : headerNav.value);
22621
22651
  function onActivate() {
22622
- blurRef.value !== null && blurRef.value.focus();
22652
+ blurRef.value?.focus();
22623
22653
  isActive.value === false && props4.goToPanel(props4.step.name);
22624
22654
  }
22625
22655
  function onKeyup2(e) {
@@ -23122,7 +23152,7 @@ function useTableSort(props4, computedPagination, colList, setPagination) {
23122
23152
  col = col.name;
23123
23153
  } else {
23124
23154
  const def = colList.value.find((def2) => def2.name === col);
23125
- if (def !== void 0 && def.sortOrder) {
23155
+ if (def?.sortOrder) {
23126
23156
  sortOrder = def.sortOrder;
23127
23157
  }
23128
23158
  }
@@ -23557,10 +23587,14 @@ var QTable_default = createComponent({
23557
23587
  tableClass: [String, Array, Object],
23558
23588
  tableHeaderStyle: [String, Array, Object],
23559
23589
  tableHeaderClass: [String, Array, Object],
23590
+ tableRowStyleFn: Function,
23591
+ tableRowClassFn: Function,
23560
23592
  cardContainerClass: [String, Array, Object],
23561
23593
  cardContainerStyle: [String, Array, Object],
23562
23594
  cardStyle: [String, Array, Object],
23563
23595
  cardClass: [String, Array, Object],
23596
+ cardStyleFn: Function,
23597
+ cardClassFn: Function,
23564
23598
  hideBottom: Boolean,
23565
23599
  hideSelectedBanner: Boolean,
23566
23600
  hideNoData: Boolean,
@@ -23596,16 +23630,16 @@ var QTable_default = createComponent({
23596
23630
  const cardDefaultClass = computed102(
23597
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" : "")
23598
23632
  );
23599
- const __containerClass = computed102(
23633
+ const containerClass = computed102(
23600
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" : "")
23601
23635
  );
23602
- const containerClass = computed102(
23603
- () => __containerClass.value + (props4.loading === true ? " q-table--loading" : "")
23636
+ const rootContainerClass = computed102(
23637
+ () => containerClass.value + (props4.loading === true ? " q-table--loading" : "")
23604
23638
  );
23605
23639
  watch44(
23606
- () => props4.tableStyle + props4.tableClass + props4.tableHeaderStyle + props4.tableHeaderClass + __containerClass.value,
23640
+ () => props4.tableStyle + props4.tableClass + props4.tableHeaderStyle + props4.tableHeaderClass + containerClass.value,
23607
23641
  () => {
23608
- hasVirtScroll.value === true && virtScrollRef.value !== null && virtScrollRef.value.reset();
23642
+ hasVirtScroll.value === true && virtScrollRef.value?.reset();
23609
23643
  }
23610
23644
  );
23611
23645
  const {
@@ -23773,13 +23807,23 @@ var QTable_default = createComponent({
23773
23807
  function getTBodyTR(row, bodySlot, pageIndex) {
23774
23808
  const key = getRowKey.value(row), selected = isRowSelected(key);
23775
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
+ }
23776
23825
  return bodySlot(
23777
- getBodyScope({
23778
- key,
23779
- row,
23780
- pageIndex,
23781
- __trClass: selected ? "selected" : ""
23782
- })
23826
+ getBodyScope(cfg)
23783
23827
  );
23784
23828
  }
23785
23829
  const bodyCell = slots["body-cell"], child = computedCols.value.map((col) => {
@@ -23825,6 +23869,15 @@ var QTable_default = createComponent({
23825
23869
  emit("rowContextmenu", evt, row, pageIndex);
23826
23870
  };
23827
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
+ }
23828
23881
  return h121("tr", data, child);
23829
23882
  }
23830
23883
  function getTBody() {
@@ -24078,28 +24131,26 @@ var QTable_default = createComponent({
24078
24131
  child.push(
24079
24132
  h121("div", { class: "q-table__separator col" })
24080
24133
  );
24081
- if (hasOpts === true) {
24082
- child.push(
24083
- h121("div", { class: "q-table__control" }, [
24084
- h121("span", { class: "q-table__bottom-item" }, [
24085
- props4.rowsPerPageLabel || $q.lang.table.recordsPerPage
24086
- ]),
24087
- h121(QSelect_default, {
24088
- class: "q-table__select inline q-table__bottom-item",
24089
- color: props4.color,
24090
- modelValue: rowsPerPage,
24091
- options: computedRowsPerPageOptions.value,
24092
- displayValue: rowsPerPage === 0 ? $q.lang.table.allRows : rowsPerPage,
24093
- dark: isDark.value,
24094
- borderless: true,
24095
- dense: true,
24096
- optionsDense: true,
24097
- optionsCover: true,
24098
- "onUpdate:modelValue": onPagSelection
24099
- })
24100
- ])
24101
- );
24102
- }
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
+ );
24103
24154
  if (paginationSlot !== void 0) {
24104
24155
  control = paginationSlot(marginalsScope.value);
24105
24156
  } else {
@@ -24124,6 +24175,7 @@ var QTable_default = createComponent({
24124
24175
  ...btnProps,
24125
24176
  icon: navIcon.value[0],
24126
24177
  disable: isFirstPage.value,
24178
+ ariaLabel: $q.lang.pagination.first,
24127
24179
  onClick: firstPage
24128
24180
  })
24129
24181
  );
@@ -24133,6 +24185,7 @@ var QTable_default = createComponent({
24133
24185
  ...btnProps,
24134
24186
  icon: navIcon.value[1],
24135
24187
  disable: isFirstPage.value,
24188
+ ariaLabel: $q.lang.pagination.prev,
24136
24189
  onClick: prevPage
24137
24190
  }),
24138
24191
  h121(QBtn_default, {
@@ -24140,6 +24193,7 @@ var QTable_default = createComponent({
24140
24193
  ...btnProps,
24141
24194
  icon: navIcon.value[2],
24142
24195
  disable: isLastPage.value,
24196
+ ariaLabel: $q.lang.pagination.next,
24143
24197
  onClick: nextPage
24144
24198
  })
24145
24199
  );
@@ -24149,6 +24203,7 @@ var QTable_default = createComponent({
24149
24203
  ...btnProps,
24150
24204
  icon: navIcon.value[3],
24151
24205
  disable: isLastPage.value,
24206
+ ariaLabel: $q.lang.pagination.last,
24152
24207
  onClick: lastPage
24153
24208
  })
24154
24209
  );
@@ -24200,7 +24255,16 @@ var QTable_default = createComponent({
24200
24255
  ],
24201
24256
  style: props4.cardStyle
24202
24257
  };
24203
- if (props4.onRowClick !== void 0 || props4.onRowDblclick !== void 0) {
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
+ }
24267
+ if (props4.onRowClick !== void 0 || props4.onRowDblclick !== void 0 || props4.onRowContextmenu !== void 0) {
24204
24268
  data.class[0] += " cursor-pointer";
24205
24269
  if (props4.onRowClick !== void 0) {
24206
24270
  data.onClick = (evt) => {
@@ -24212,6 +24276,11 @@ var QTable_default = createComponent({
24212
24276
  emit("RowDblclick", evt, scope.row, scope.pageIndex);
24213
24277
  };
24214
24278
  }
24279
+ if (props4.onRowContextmenu !== void 0) {
24280
+ data.onContextmenu = (evt) => {
24281
+ emit("rowContextmenu", evt, scope.row, scope.pageIndex);
24282
+ };
24283
+ }
24215
24284
  }
24216
24285
  return h121("div", {
24217
24286
  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" : "")
@@ -24256,7 +24325,7 @@ var QTable_default = createComponent({
24256
24325
  });
24257
24326
  return () => {
24258
24327
  const child = [getTopDiv()];
24259
- const data = { ref: rootRef, class: containerClass.value };
24328
+ const data = { ref: rootRef, class: rootContainerClass.value };
24260
24329
  if (props4.grid === true) {
24261
24330
  child.push(getGridHeader());
24262
24331
  } else {
@@ -24291,7 +24360,10 @@ var QTr_default = createComponent({
24291
24360
  const classes = computed103(
24292
24361
  () => "q-tr" + (props4.props === void 0 || props4.props.header === true ? "" : " " + props4.props.__trClass) + (props4.noHover === true ? " q-tr--no-hover" : "")
24293
24362
  );
24294
- 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));
24295
24367
  }
24296
24368
  });
24297
24369
 
@@ -24498,7 +24570,7 @@ var QTime_default = createComponent({
24498
24570
  }
24499
24571
  const pos = [];
24500
24572
  for (let val = start, index = start; val <= end; val += step, index++) {
24501
- 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;
24502
24574
  pos.push({ val: actualVal, index, disable, label });
24503
24575
  }
24504
24576
  return pos;
@@ -25367,7 +25439,7 @@ var QTree_default = createComponent({
25367
25439
  node[props4.childrenKey] = Array.isArray(children) === true ? children : [];
25368
25440
  nextTick21(() => {
25369
25441
  const localMeta = meta.value[key];
25370
- if (localMeta && localMeta.isParent === true) {
25442
+ if (localMeta?.isParent === true) {
25371
25443
  localSetExpanded(key, true);
25372
25444
  }
25373
25445
  });
@@ -25592,8 +25664,7 @@ var QTree_default = createComponent({
25592
25664
  ]);
25593
25665
  }
25594
25666
  function blur(key) {
25595
- const blurTarget = blurTargets[key];
25596
- blurTarget && blurTarget.focus();
25667
+ blurTargets[key]?.focus();
25597
25668
  }
25598
25669
  function onClick(node, meta2, e, keyboard) {
25599
25670
  keyboard !== true && meta2.selectable !== false && blur(meta2.key);
@@ -26559,7 +26630,7 @@ function morph(_options) {
26559
26630
  elFrom.qMorphCancel = () => {
26560
26631
  cancelStatus = true;
26561
26632
  elFromClone.remove();
26562
- elFromTween !== void 0 && elFromTween.remove();
26633
+ elFromTween?.remove();
26563
26634
  options.hideFromClone === true && elFromClone.classList.remove("q-morph--internal");
26564
26635
  elFrom.qMorphCancel = void 0;
26565
26636
  };
@@ -26584,7 +26655,7 @@ function morph(_options) {
26584
26655
  elTo.qMorphCancel = () => {
26585
26656
  cancelStatus = true;
26586
26657
  elFromClone.remove();
26587
- elFromTween !== void 0 && elFromTween.remove();
26658
+ elFromTween?.remove();
26588
26659
  options.hideFromClone === true && elFromClone.classList.remove("q-morph--internal");
26589
26660
  options.keepToClone !== true && elTo.classList.remove("q-morph--internal");
26590
26661
  elFrom.qMorphCancel = void 0;
@@ -26740,10 +26811,12 @@ function morph(_options) {
26740
26811
  elTo.style.cssText = elToStyleSaved;
26741
26812
  elTo.className = elToClassSaved;
26742
26813
  }
26743
- elToClone.parentNode === elToParent && elToParent.insertBefore(elTo, elToClone);
26814
+ if (elToClone.parentNode === elToParent) {
26815
+ elToParent.insertBefore(elTo, elToClone);
26816
+ }
26744
26817
  elFromClone.remove();
26745
26818
  elToClone.remove();
26746
- elFromTween !== void 0 && elFromTween.remove();
26819
+ elFromTween?.remove();
26747
26820
  cancel = () => false;
26748
26821
  elFrom.qMorphCancel = void 0;
26749
26822
  elTo.qMorphCancel = void 0;
@@ -26875,9 +26948,9 @@ function morph(_options) {
26875
26948
  delay: options.delay
26876
26949
  });
26877
26950
  const cleanup = (abort) => {
26878
- animationFromClone !== void 0 && animationFromClone.cancel();
26879
- animationFromTween !== void 0 && animationFromTween.cancel();
26880
- animationToClone !== void 0 && animationToClone.cancel();
26951
+ animationFromClone?.cancel();
26952
+ animationFromTween?.cancel();
26953
+ animationToClone?.cancel();
26881
26954
  animationTo.cancel();
26882
26955
  animationTo.removeEventListener("finish", cleanup);
26883
26956
  animationTo.removeEventListener("cancel", cleanup);
@@ -26908,9 +26981,9 @@ function morph(_options) {
26908
26981
  return true;
26909
26982
  }
26910
26983
  endElementTo = endElementTo !== true;
26911
- animationFromClone !== void 0 && animationFromClone.reverse();
26912
- animationFromTween !== void 0 && animationFromTween.reverse();
26913
- animationToClone !== void 0 && animationToClone.reverse();
26984
+ animationFromClone?.reverse();
26985
+ animationFromTween?.reverse();
26986
+ animationToClone?.reverse();
26914
26987
  animationTo.reverse();
26915
26988
  return true;
26916
26989
  };
@@ -27162,7 +27235,7 @@ function trigger2(group) {
27162
27235
  },
27163
27236
  ...to.opts,
27164
27237
  onEnd(dir, aborted) {
27165
- to.opts.onEnd !== void 0 && to.opts.onEnd(dir, aborted);
27238
+ to.opts.onEnd?.(dir, aborted);
27166
27239
  if (aborted === true) return;
27167
27240
  from.animating = false;
27168
27241
  to.animating = false;
@@ -27279,7 +27352,7 @@ var Morph_default = createDirective(
27279
27352
  if (index !== -1) {
27280
27353
  group.queue = group.queue.filter((item) => item !== ctx);
27281
27354
  if (group.queue.length === 0) {
27282
- group.cancel !== void 0 && group.cancel();
27355
+ group.cancel?.();
27283
27356
  delete morphGroups[ctx.group];
27284
27357
  }
27285
27358
  }
@@ -27303,7 +27376,7 @@ var defaultCfg2 = {
27303
27376
  };
27304
27377
  function update3(el, ctx, value2) {
27305
27378
  ctx.handler = value2;
27306
- ctx.observer !== void 0 && ctx.observer.disconnect();
27379
+ ctx.observer?.disconnect();
27307
27380
  ctx.observer = new MutationObserver((list) => {
27308
27381
  if (typeof ctx.handler === "function") {
27309
27382
  const res = ctx.handler(list);
@@ -27317,7 +27390,7 @@ function update3(el, ctx, value2) {
27317
27390
  function destroy2(el) {
27318
27391
  const ctx = el.__qmutation;
27319
27392
  if (ctx !== void 0) {
27320
- ctx.observer !== void 0 && ctx.observer.disconnect();
27393
+ ctx.observer?.disconnect();
27321
27394
  delete el.__qmutation;
27322
27395
  }
27323
27396
  }
@@ -27506,7 +27579,7 @@ var TouchHold_default = createDirective(
27506
27579
  },
27507
27580
  end(evt) {
27508
27581
  cleanEvt(ctx, "temp");
27509
- ctx.styleCleanup !== void 0 && ctx.styleCleanup(ctx.triggered);
27582
+ ctx.styleCleanup?.(ctx.triggered);
27510
27583
  if (ctx.triggered === true) {
27511
27584
  evt !== void 0 && stopAndPrevent(evt);
27512
27585
  } else if (ctx.timer !== void 0) {
@@ -27548,7 +27621,7 @@ var TouchHold_default = createDirective(
27548
27621
  cleanEvt(ctx, "main");
27549
27622
  cleanEvt(ctx, "temp");
27550
27623
  ctx.timer !== void 0 && clearTimeout(ctx.timer);
27551
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
27624
+ ctx.styleCleanup?.();
27552
27625
  delete el.__qtouchhold;
27553
27626
  }
27554
27627
  }
@@ -27690,8 +27763,8 @@ var TouchRepeat_default = createDirective(
27690
27763
  },
27691
27764
  end(evt) {
27692
27765
  if (ctx.event === void 0) return;
27693
- ctx.styleCleanup !== void 0 && ctx.styleCleanup(true);
27694
- evt !== void 0 && ctx.event.repeatCount > 0 && stopAndPrevent(evt);
27766
+ ctx.styleCleanup?.(true);
27767
+ if (evt !== void 0 && ctx.event.repeatCount > 0) stopAndPrevent(evt);
27695
27768
  cleanEvt(ctx, "temp");
27696
27769
  if (ctx.timer !== void 0) {
27697
27770
  clearTimeout(ctx.timer);
@@ -27731,7 +27804,7 @@ var TouchRepeat_default = createDirective(
27731
27804
  ctx.timer !== void 0 && clearTimeout(ctx.timer);
27732
27805
  cleanEvt(ctx, "main");
27733
27806
  cleanEvt(ctx, "temp");
27734
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
27807
+ ctx.styleCleanup?.();
27735
27808
  delete el.__qtouchrepeat;
27736
27809
  }
27737
27810
  }
@@ -28075,12 +28148,12 @@ function create_dialog_default(DefaultComponent, supportsCustomComponent, parent
28075
28148
  const dialogRef = ref68(null);
28076
28149
  const el = createGlobalNode(false, "dialog");
28077
28150
  const applyState = (cmd) => {
28078
- if (dialogRef.value !== null && dialogRef.value[cmd] !== void 0) {
28151
+ if (dialogRef.value?.[cmd] !== void 0) {
28079
28152
  dialogRef.value[cmd]();
28080
28153
  return;
28081
28154
  }
28082
28155
  const target2 = vm2.$.subTree;
28083
- if (target2 && target2.component) {
28156
+ if (target2?.component) {
28084
28157
  if (target2.component.proxy && target2.component.proxy[cmd]) {
28085
28158
  target2.component.proxy[cmd]();
28086
28159
  return;
@@ -28567,7 +28640,7 @@ var originalDefaults = {
28567
28640
  };
28568
28641
  var defaults = { ...originalDefaults };
28569
28642
  function registerProps(opts) {
28570
- if (opts && opts.group !== void 0 && activeGroups[opts.group] !== void 0) {
28643
+ if (opts?.group !== void 0 && activeGroups[opts.group] !== void 0) {
28571
28644
  return Object.assign(activeGroups[opts.group], opts);
28572
28645
  }
28573
28646
  const newProps = isObject(opts) === true && opts.ignoreDefaults === true ? { ...originalDefaults, ...opts } : { ...defaults, ...opts };
@@ -29012,7 +29085,7 @@ function addNotification(config, $q, originalApi) {
29012
29085
  const actions = (Array.isArray(config.actions) === true ? config.actions : []).concat(
29013
29086
  config.ignoreDefaults !== true && Array.isArray(defaults2.actions) === true ? defaults2.actions : []
29014
29087
  ).concat(
29015
- 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 : []
29016
29089
  );
29017
29090
  const { closeBtn } = notif;
29018
29091
  closeBtn && actions.push({
@@ -29731,9 +29804,9 @@ function parseFeatures(winFeatures) {
29731
29804
  function openWindow(url, reject, windowFeatures) {
29732
29805
  let open2 = window.open;
29733
29806
  if (Platform_default.is.cordova === true) {
29734
- if (cordova !== void 0 && cordova.InAppBrowser !== void 0 && cordova.InAppBrowser.open !== void 0) {
29807
+ if (cordova?.InAppBrowser?.open !== void 0) {
29735
29808
  open2 = cordova.InAppBrowser.open;
29736
- } else if (navigator !== void 0 && navigator.app !== void 0) {
29809
+ } else if (navigator?.app !== void 0) {
29737
29810
  return navigator.app.loadUrl(url, {
29738
29811
  openExternal: true
29739
29812
  });
@@ -29744,7 +29817,7 @@ function openWindow(url, reject, windowFeatures) {
29744
29817
  Platform_default.is.desktop && win.focus();
29745
29818
  return win;
29746
29819
  } else {
29747
- reject && reject();
29820
+ reject?.();
29748
29821
  }
29749
29822
  }
29750
29823
  var open_url_default = (url, reject, windowFeatures) => {
@@ -29829,7 +29902,7 @@ function runSequentialPromises(sequentialPromises, { threadsNumber = 1, abortOnF
29829
29902
 
29830
29903
  // src/index.dev.js
29831
29904
  var Quasar = {
29832
- version: "2.17.6",
29905
+ version: "2.18.0",
29833
29906
  install: install_quasar_default,
29834
29907
  // TODO: remove in Qv3 (should only be used through the plugin)
29835
29908
  // We provide a deprecated fallback here